Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Questionable package name validation #11800

Closed
p5pRT opened this issue Dec 11, 2011 · 25 comments
Closed

Questionable package name validation #11800

p5pRT opened this issue Dec 11, 2011 · 25 comments

Comments

@p5pRT
Copy link

p5pRT commented Dec 11, 2011

Migrated from rt.perl.org#105922 (status was 'resolved')

Searchable as RT105922$

@p5pRT
Copy link
Author

p5pRT commented Dec 11, 2011

From @cpansprout

This is apparently a valid package name​:

$ perl -le 'q"_#@​*$!@​*^("->can(can); print -ok'
-ok

But this is not​:

$ perl -le 'q"#@​*$!@​*^(_"->can(can); print -ok'
Can't call method "can" without a package or object reference at -e line 1.

That also means that main​::foo is not always equivalent to :​:foo​:

$ perl -le 'main​::foo->can(can); print -ok'
-ok
$ perl -le '​::foo->can(can); print -ok'
Can't call method "can" without a package or object reference at -e line 1.

If we could eliminate that check, it would allow for far more possibilities with UNIVERSAL methods--a bit like autobox.

I think this is a pity​:

$ ./perl -Ilib -le' print foo->CORE​::uc'
FOO
$ ./perl -Ilib -le' print "3foo"->CORE​::uc'
Can't call method "CORE​::uc" without a package or object reference at -e line 1.

Also, the Unicode Bug affects class method calls. Fixing the above (which would fix this too) is easier than fixing just this​:

$ ./perl -Ilib -Mutf8 -le '$p = "þackage"; $p->can(can)'

$ ./perl -Ilib -Mutf8 -le '$p = "þackage"; utf8​::downgrade $p; $p->can(can)'
Can't call method "can" without a package or object reference at -e line 1.

It doesn’t even work when the package exists.

And to drive the point home​:

$ perl -e 'sub foo { warn $​::Moose​::VERSION } use Moose'
Can't call method "can" without a package or object reference at /Library/Perl/5.10.1/darwin-thread-multi-2level/Moose/Exporter.pm line 348.


Flags​:
  category=core
  severity=low


Site configuration information for perl 5.15.4​:

Configured by sprout at Wed Nov 2 09​:06​:14 PDT 2011.

Summary of my perl5 (revision 5 version 15 subversion 4) configuration​:
  Snapshot of​: f364061
  Platform​:
  osname=darwin, osvers=10.5.0, archname=darwin-thread-multi-2level
  uname='darwin pint.local 10.5.0 darwin kernel version 10.5.0​: fri nov 5 23​:20​:39 pdt 2010; root​:xnu-1504.9.17~1release_i386 i386 '
  config_args='-de -Doptimize=-g -Dusedevel -Duseithreads -Dmad'
  hint=recommended, useposix=true, d_sigaction=define
  useithreads=define, usemultiplicity=define
  useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
  use64bitint=undef, use64bitall=undef, uselongdouble=undef
  usemymalloc=n, bincompat5005=undef
  Compiler​:
  cc='cc', ccflags ='-fno-common -DPERL_DARWIN -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include',
  optimize='-g',
  cppflags='-fno-common -DPERL_DARWIN -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include'
  ccversion='', gccversion='4.2.1 (Apple Inc. build 5664)', gccosandvers=''
  intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
  d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
  ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
  alignbytes=8, prototype=define
  Linker and Libraries​:
  ld='env MACOSX_DEPLOYMENT_TARGET=10.3 cc', ldflags =' -fstack-protector -L/usr/local/lib'
  libpth=/usr/local/lib /usr/lib
  libs=-ldbm -ldl -lm -lutil -lc
  perllibs=-ldl -lm -lutil -lc
  libc=, so=dylib, useshrplib=false, libperl=libperl.a
  gnulibc_version=''
  Dynamic Linking​:
  dlsrc=dl_dlopen.xs, dlext=bundle, d_dlsymun=undef, ccdlflags=' '
  cccdlflags=' ', lddlflags=' -bundle -undefined dynamic_lookup -L/usr/local/lib -fstack-protector'

Locally applied patches​:
 


@​INC for perl 5.15.4​:
  /usr/local/lib/perl5/site_perl/5.15.4/darwin-thread-multi-2level
  /usr/local/lib/perl5/site_perl/5.15.4
  /usr/local/lib/perl5/5.15.4/darwin-thread-multi-2level
  /usr/local/lib/perl5/5.15.4
  /usr/local/lib/perl5/site_perl
  .


Environment for perl 5.15.4​:
  DYLD_LIBRARY_PATH (unset)
  HOME=/Users/sprout
  LANG=en_US.UTF-8
  LANGUAGE (unset)
  LD_LIBRARY_PATH (unset)
  LOGDIR (unset)
  PATH=/usr/bin​:/bin​:/usr/sbin​:/sbin​:/usr/local/bin​:/usr/X11/bin​:/usr/local/bin
  PERL_BADLANG (unset)
  SHELL=/bin/bash

@p5pRT
Copy link
Author

p5pRT commented Dec 13, 2011

From @ikegami

On Sun, Dec 11, 2011 at 4​:35 PM, Father Chrysostomos <
perlbug-followup@​perl.org> wrote​:

Also, the Unicode Bug affects class method calls. Fixing the above (which
would fix this too) is easier than fixing just this​:

$ ./perl -Ilib -Mutf8 -le '$p = "þackage"; $p->can(can)'

$ ./perl -Ilib -Mutf8 -le '$p = "þackage"; utf8​::downgrade $p;
$p->can(can)'
Can't call method "can" without a package or object reference at -e line 1.

And feature unicode_strings doesn't help.

@p5pRT
Copy link
Author

p5pRT commented Dec 13, 2011

The RT System itself - Status changed from 'new' to 'open'

@p5pRT
Copy link
Author

p5pRT commented Dec 13, 2011

From @Hugmeir

On Tue, Dec 13, 2011 at 5​:48 PM, Eric Brine <ikegami@​adaelis.com> wrote​:

On Sun, Dec 11, 2011 at 4​:35 PM, Father Chrysostomos <
perlbug-followup@​perl.org> wrote​:

Also, the Unicode Bug affects class method calls. Fixing the above
(which would fix this too) is easier than fixing just this​:

$ ./perl -Ilib -Mutf8 -le '$p = "þackage"; $p->can(can)'

$ ./perl -Ilib -Mutf8 -le '$p = "þackage"; utf8​::downgrade $p;
$p->can(can)'
Can't call method "can" without a package or object reference at -e line
1.

And feature unicode_strings doesn't help.

Whoops, that was me. Fixing this is one line in pp_hot.c (patch attached),
but that part of the code is just.. weird.

A valid class name, as far as the left side of -> is concerned, is either
something that is already in the stash cache hash, and failing that,
something that has a IO slot, and failing that, something that matches
/^[\p{XIDS}_]/.
I think that explains why _#@​*$!@​*^( works, but #@​*$!@​*^(_ doesn't, and
similarly with :​:foo. Though it sure seems... quirky.

The IO part is the real kicker though​: You can make *anything* a valid
class name by doing something like perl -E 'open q<#@​*$!@​*^(_>, ">", undef;
q<#@​*$!@​*^(_>->can(can)'

@p5pRT
Copy link
Author

p5pRT commented Dec 13, 2011

From @Hugmeir

0001-pp_hot.c-First-letter-of-latin-1-classnames-wasn-t.patch
From a9ad2aee8acc54e97fdd09e75ae9390b5b2807b2 Mon Sep 17 00:00:00 2001
From: Brian Fraser <fraserbn@gmail.com>
Date: Tue, 13 Dec 2011 19:32:48 -0300
Subject: [PATCH] pp_hot.c: First letter of latin-1 classnames wasn't being checked correctly.

Previously the first letter for latin-1 classnames was being mischecked, only
allowing ASCII, which caused an instance of the Unicode Bug for downgradable
classnames.
---
 pp_hot.c        |    2 +-
 t/uni/package.t |   19 ++++++++++++++++++-
 2 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/pp_hot.c b/pp_hot.c
index 70eb5a1..a2d6f91 100644
--- a/pp_hot.c
+++ b/pp_hot.c
@@ -2973,7 +2973,7 @@ S_method_common(pTHX_ SV* meth, U32* hashp)
 	    if (!packname ||
 		((UTF8_IS_START(*packname) && DO_UTF8(sv))
 		    ? !isIDFIRST_utf8((U8*)packname)
-		    : !isIDFIRST(*packname)
+		    : !isIDFIRST_L1((U8)*packname)
 		))
 	    {
 		Perl_croak(aTHX_ "Can't call method \"%"SVf"\" %s",
diff --git a/t/uni/package.t b/t/uni/package.t
index 317ddd4..bb9092b 100644
--- a/t/uni/package.t
+++ b/t/uni/package.t
@@ -6,7 +6,7 @@ BEGIN {
     require './test.pl';
 }
 
-plan (tests => 16);
+plan (tests => 18);
 
 use utf8;
 use open qw( :utf8 :std );
@@ -92,3 +92,20 @@ ok 1, "sanity check. If we got this far, UTF-8 in package names is legal.";
     eval q[package ��� {];
     like $@, qr/\AMissing right curly /, "comp/package_block.t test";
 }
+
+# perl #105922
+
+{
+   my $latin_1 = "��ackage";
+   my $utf8    = "��ackage";
+   utf8::downgrade($latin_1);
+   utf8::upgrade($utf8);
+
+   local $@;
+   eval { $latin_1->can("yadda") };
+   ok(!$@, "latin1->meth works");
+
+   local $@;
+   eval { $utf8->can("yadda") };
+   ok(!$@, "utf8->meth works");
+}
-- 
1.5.6.3

@p5pRT
Copy link
Author

p5pRT commented Dec 13, 2011

From tchrist@perl.com

A valid class name, as far as the left side of -> is concerned, is either
something that is already in the stash cache hash, and failing that,
something that has a IO slot, and failing that, something that matches
/^[\p{XIDS}_]/.

Oh darn it. I had convinced myself that Perl identifiers could
also start with \p{PC}. Or at least, some of them can, which
I do know. It's just not clear which are which.

And which ones can start with \p{Nd} is also anything but clear.

Not clear, not clean.

--tom

@p5pRT
Copy link
Author

p5pRT commented Dec 13, 2011

From @Hugmeir

On Tue, Dec 13, 2011 at 8​:12 PM, Tom Christiansen <tchrist@​perl.com> wrote​:

A valid class name, as far as the left side of -> is concerned, is either
something that is already in the stash cache hash, and failing that,
something that has a IO slot, and failing that, something that matches
/^[\p{XIDS}_]/.

Oh darn it. I had convinced myself that Perl identifiers could
also start with \p{PC}. Or at least, some of them can, which
I do know. It's just not clear which are which.

And which ones can start with \p{Nd} is also anything but clear.

Not clear, not clean.

That's rightish too. But do note that I said class names on the left side
of ->, not identifiers in general ( that can of worms is well known :).
"1"->can(yadda) won't work, even though 1 is a valid identifier, and so on.

@p5pRT
Copy link
Author

p5pRT commented Dec 16, 2011

From @cpansprout

On Tue Dec 13 14​:58​:38 2011, Hugmeir wrote​:

On Tue, Dec 13, 2011 at 5​:48 PM, Eric Brine <ikegami@​adaelis.com> wrote​:

On Sun, Dec 11, 2011 at 4​:35 PM, Father Chrysostomos <
perlbug-followup@​perl.org> wrote​:

Also, the Unicode Bug affects class method calls. Fixing the above
(which would fix this too) is easier than fixing just this​:

$ ./perl -Ilib -Mutf8 -le '$p = "�ackage"; $p->can(can)'

$ ./perl -Ilib -Mutf8 -le '$p = "�ackage"; utf8​::downgrade $p;
$p->can(can)'
Can't call method "can" without a package or object reference at -e
line
1.

And feature unicode_strings doesn't help.

Whoops, that was me. Fixing this is one line in pp_hot.c (patch attached),
but that part of the code is just.. weird.

A valid class name, as far as the left side of -> is concerned, is either
something that is already in the stash cache hash, and failing that,
something that has a IO slot, and failing that, something that matches
/^[\p{XIDS}_]/.
I think that explains why _#@​*$!@​*^( works, but #@​*$!@​*^(_ doesn't, and
similarly with :​:foo. Though it sure seems... quirky.

The IO part is the real kicker though​: You can make *anything* a valid
class name by doing something like perl -E 'open q<#@​*$!@​*^(_>, ">",
undef;
q<#@​*$!@​*^(_>->can(can)'

That’s not a class method call. That’s an IO method.

$ perl -E 'open q<#@​*$!@​*^(_>, ">", undef; q<#@​*$!@​*^(_>->oeunt'
Can't locate object method "oeunt" via package "IO​::Handle" at -e line 1.

And 5.9.5 had a bug making constants turn into IOs​:

perl5.9.5 -Mconstant=Just,0 -le 'sub
IO​::Handle​::a_japh{print*{$_[0]}=~/([^​:]+)$/," another Perl hacker,"}
"Just"->a_japh'

:-)

--

Father Chrysostomos

@p5pRT
Copy link
Author

p5pRT commented Dec 16, 2011

From @cpansprout

On Tue Dec 13 14​:58​:38 2011, Hugmeir wrote​:

On Tue, Dec 13, 2011 at 5​:48 PM, Eric Brine <ikegami@​adaelis.com> wrote​:

On Sun, Dec 11, 2011 at 4​:35 PM, Father Chrysostomos <
perlbug-followup@​perl.org> wrote​:

Also, the Unicode Bug affects class method calls. Fixing the above
(which would fix this too) is easier than fixing just this​:

$ ./perl -Ilib -Mutf8 -le '$p = "�ackage"; $p->can(can)'

$ ./perl -Ilib -Mutf8 -le '$p = "�ackage"; utf8​::downgrade $p;
$p->can(can)'
Can't call method "can" without a package or object reference at -e
line
1.

And feature unicode_strings doesn't help.

Whoops, that was me. Fixing this is one line in pp_hot.c (patch attached),
but that part of the code is just.. weird.

Thank you. Applied as d47f310.

--

Father Chrysostomos

@p5pRT
Copy link
Author

p5pRT commented Dec 16, 2011

@cpansprout - Status changed from 'open' to 'resolved'

@p5pRT
Copy link
Author

p5pRT commented Dec 16, 2011

@cpansprout - Status changed from 'resolved' to 'open'

@p5pRT
Copy link
Author

p5pRT commented Jul 3, 2012

From @doy

So is the way to move forward here to just make any string valid on the
lhs of ->? I think this would make a lot more sense than the current
behavior.

-doy

@p5pRT
Copy link
Author

p5pRT commented Jul 4, 2012

From @cpansprout

On Tue Jul 03 14​:04​:57 2012, doy wrote​:

So is the way to move forward here to just make any string valid on the
lhs of ->? I think this would make a lot more sense than the current
behavior.

Yes, I think so. It’s on my to-do list, but my to-do list is *long*. :-)

In other words, I would be happy for someone to get to this before I do.

--

Father Chrysostomos

@p5pRT
Copy link
Author

p5pRT commented Jul 4, 2012

From [Unknown Contact. See original ticket]

On Tue Jul 03 14​:04​:57 2012, doy wrote​:

So is the way to move forward here to just make any string valid on the
lhs of ->? I think this would make a lot more sense than the current
behavior.

Yes, I think so. It’s on my to-do list, but my to-do list is *long*. :-)

In other words, I would be happy for someone to get to this before I do.

--

Father Chrysostomos

@p5pRT
Copy link
Author

p5pRT commented Jul 4, 2012

From @rjbs

On Tue Jul 03 14​:04​:57 2012, doy wrote​:

So is the way to move forward here to just make any string valid on the
lhs of ->? I think this would make a lot more sense than the current
behavior.

Yes.

@p5pRT
Copy link
Author

p5pRT commented Jul 4, 2012

From @cpansprout

On Wed Jul 04 05​:46​:31 2012, rjbs wrote​:

On Tue Jul 03 14​:04​:57 2012, doy wrote​:

So is the way to move forward here to just make any string valid on the
lhs of ->? I think this would make a lot more sense than the current
behavior.

Yes.

Test​::More fails its tests with the attachment, because it’s doing this​:

  elsif( $error =~ /Can't call method "isa" without a package/ ) {

but "anything"->isa("Wibble") will simply return false now, instead of
dying.

That means Test​::More​::isa_ok may output​:

# Failed test 'My Wibble isa Wibble'
# at t/fail-more.t line 248.
# My Wibble isn't a 'Wibble' it's a ''

instead of what its tests are checking for​:

# Failed test 'My Wibble isa Wibble'
# at t/fail-more.t line 248.
# My Wibble isn't a class or reference

(That ‘it's a ''’ is another bug, reported as #78204.)

I think Test​::More’s tests will need a little bit of adjustment.

--

Father Chrysostomos

@p5pRT
Copy link
Author

p5pRT commented Jul 4, 2012

From @cpansprout

From 8eff703c953b1daece21d3ef7bda95618fac1a0a Mon Sep 17 00​:00​:00 2001
From​: Father Chrysostomos <sprout@​cpan.org>
Date​: Wed, 4 Jul 2012 11​:25​:52 -0700
Subject​: [PATCH] [perl #105922] Allow any string before ->meth
MIME-Version​: 1.0
Content-Type​: text/plain; charset=UTF-8
Content-Transfer-Encoding​: 8bit

The rules for filtering out what do not look like package names are
not logical and disallow valid things like "​::main", while allowing
q"_#@​*$!@​*^(".

This commit simply lets any non-empty string be used as a package
name. If it is a typo, you’ll get an error anyway. This allows
autobox-style calls like "3foo"->CORE​::uc, or even "3foo"->uc if you
set up @​ISA first.

I made an exception for the empty string because it messes up caches
somehow and causes subsequent method calls all to be called on the
main package. I haven’t looked into that yet. I don’t know whether
it’s worth it.

Inline Patch
diff --git a/pp_hot.c b/pp_hot.c
index 77b707c..6366aee 100644
--- a/pp_hot.c
+++ b/pp_hot.c
@@ -2960,12 +2960,14 @@ S_method_common(pTHX_ SV* meth, U32* hashp)
     PERL_ARGS_ASSERT_METHOD_COMMON;
 
     if (!sv)
+       undefined:
 	Perl_croak(aTHX_ "Can't call method \"%"SVf"\" on an undefined value",
 		   SVfARG(meth));
 
     SvGETMAGIC(sv);
     if (SvROK(sv))
 	ob = MUTABLE_SV(SvRV(sv));
+    else if (!SvOK(sv)) goto undefined;
     else {
 	GV* iogv;
         STRLEN packlen;
@@ -2994,17 +2996,11 @@ S_method_common(pTHX_ SV* meth, U32* hashp)
 	    !(ob=MUTABLE_SV(GvIO(iogv))))
 	{
 	    /* this isn't the name of a filehandle either */
-	    if (!packname ||
-		((UTF8_IS_START(*packname) && DO_UTF8(sv))
-		    ? !isIDFIRST_utf8((U8*)packname)
-		    : !isIDFIRST_L1((U8)*packname)
-		))
+	    if (!packname || !packlen)
 	    {
-		/* diag_listed_as: Can't call method "%s" without a package or object reference */
-		Perl_croak(aTHX_ "Can't call method \"%"SVf"\" %s",
-			   SVfARG(meth),
-			   SvOK(sv) ? "without a package or object reference"
-				    : "on an undefined value");
+		Perl_croak(aTHX_ "Can't call method \"%"SVf"\" "
+				 "without a package or object reference",
+				  SVfARG(meth));
 	    }
 	    /* assume it's a package name */
 	    stash = gv_stashpvn(packname, packlen, packname_is_utf8 ? SVf_UTF8 : 0);
diff --git a/t/op/method.t b/t/op/method.t
index 09f6ee3..8f6bfb8 100644
--- a/t/op/method.t
+++ b/t/op/method.t
@@ -13,7 +13,7 @@ BEGIN {
 use strict;
 no warnings 'once';
 
-plan(tests => 98);
+plan(tests => 103);
 
 @A::ISA = 'B';
 @B::ISA = 'C';
@@ -417,3 +417,15 @@ eval { () = undef; new {} };
 like $@,
      qr/^Can't call method "new" without a package or object reference/,
     'Err msg from new{} when stack contains undef';
+
+sub flomp { "flimp" }
+sub main::::flomp { "flump" }
+is "::"->flomp, 'flump', 'method call on ::';
+is "::main"->flomp, 'flimp', 'method call on ::main';
+eval { ""->flomp };
+like $@,
+     qr/^Can't call method "flomp" without a package or object reference/,
+    'method call on empty string';
+is "3foo"->CORE::uc, '3FOO', '"3foo"->CORE::uc';
+{ no strict; @{"3foo::ISA"} = "CORE"; }
+is "3foo"->uc, '3FOO', '"3foo"->uc (autobox style!)';
diff --git a/t/run/fresh_perl.t b/t/run/fresh_perl.t
index cd5899a..376ceaf 100644
--- a/t/run/fresh_perl.t
+++ b/t/run/fresh_perl.t
@@ -81,7 +81,7 @@ $array[128]=1
 ########
 $x=0x0eabcd; print $x->ref;
 EXPECT
-Can't call method "ref" without a package or object reference at - line 1.
+Can't locate object method "ref" via package "961485" (perhaps you forgot to load "961485"?) at - line 1.
 ########
 chop ($str .= <DATA>);
 ########

@p5pRT
Copy link
Author

p5pRT commented Jul 4, 2012

From [Unknown Contact. See original ticket]

On Wed Jul 04 05​:46​:31 2012, rjbs wrote​:

On Tue Jul 03 14​:04​:57 2012, doy wrote​:

So is the way to move forward here to just make any string valid on the
lhs of ->? I think this would make a lot more sense than the current
behavior.

Yes.

Test​::More fails its tests with the attachment, because it’s doing this​:

  elsif( $error =~ /Can't call method "isa" without a package/ ) {

but "anything"->isa("Wibble") will simply return false now, instead of
dying.

That means Test​::More​::isa_ok may output​:

# Failed test 'My Wibble isa Wibble'
# at t/fail-more.t line 248.
# My Wibble isn't a 'Wibble' it's a ''

instead of what its tests are checking for​:

# Failed test 'My Wibble isa Wibble'
# at t/fail-more.t line 248.
# My Wibble isn't a class or reference

(That ‘it's a ''’ is another bug, reported as #78204.)

I think Test​::More’s tests will need a little bit of adjustment.

--

Father Chrysostomos

@p5pRT
Copy link
Author

p5pRT commented Jul 5, 2012

From @cpansprout

On Wed Jul 04 12​:36​:34 2012, sprout wrote​:

Test​::More fails its tests with the attachment,

which is also on the sprout/package-names-113974 branch.

--

Father Chrysostomos

@p5pRT
Copy link
Author

p5pRT commented Jul 5, 2012

From [Unknown Contact. See original ticket]

On Wed Jul 04 12​:36​:34 2012, sprout wrote​:

Test​::More fails its tests with the attachment,

which is also on the sprout/package-names-113974 branch.

--

Father Chrysostomos

@p5pRT
Copy link
Author

p5pRT commented Jul 6, 2012

From @rjbs

* Father Chrysostomos via RT <perlbug-comment@​perl.org> [2012-07-04T15​:36​:35]

Test​::More fails its tests with the attachment, because it’s doing this​:

        elsif\( $error =~ /Can't call method "isa" without a package/ \) \{

but "anything"->isa("Wibble") will simply return false now, instead of
dying.
[…]
I think Test​::More’s tests will need a little bit of adjustment.

I think so, too.

Schwern, what say you?

--
rjbs

@p5pRT
Copy link
Author

p5pRT commented Jul 6, 2012

From @schwern

-----BEGIN PGP SIGNED MESSAGE-----
Hash​: SHA1

On 2012.7.5 7​:53 PM, Ricardo Signes wrote​:

I think Test​::More’s tests will need a little bit of adjustment.

I think so, too.

Schwern, what say you?

I have no objection.

- --
24. Must not tell any officer that I am smarter than they are, especially
  if it's true.
  -- The 213 Things Skippy Is No Longer Allowed To Do In The U.S. Army
  http​://skippyslist.com/list/
-----BEGIN PGP SIGNATURE-----
Version​: GnuPG v2.0.19 (Darwin)
Comment​: Using GnuPG with Mozilla - http​://enigmail.mozdev.org/

iEYEARECAAYFAk/2WrgACgkQWMohlhD1QyfosgCfQRSIoGkdAK7JGRJre4eKalZY
7H4AoIgg0sMRxmkfj6XIaVw8WmIvZBGE
=9JuS
-----END PGP SIGNATURE-----

@p5pRT
Copy link
Author

p5pRT commented Sep 20, 2012

From @cpansprout

Fixed in 7156e69.
--

Father Chrysostomos

@p5pRT
Copy link
Author

p5pRT commented Sep 20, 2012

From [Unknown Contact. See original ticket]

Fixed in 7156e69.
--

Father Chrysostomos

@p5pRT
Copy link
Author

p5pRT commented Sep 20, 2012

@cpansprout - Status changed from 'open' to 'resolved'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant