This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
PerlIO: remove string eval/code injection (#119287)
authorLukas Mai <l.mai@web.de>
Sat, 17 Aug 2013 07:29:52 +0000 (09:29 +0200)
committerFather Chrysostomos <sprout@cpan.org>
Sat, 17 Aug 2013 13:57:34 +0000 (06:57 -0700)
lib/PerlIO.pm
t/io/perlio.t

index a6745cd..0a68f3a 100644 (file)
@@ -1,6 +1,6 @@
 package PerlIO;
 
-our $VERSION = '1.07';
+our $VERSION = '1.08';
 
 # Map layer name to package that defines it
 our %alias;
@@ -19,7 +19,7 @@ sub import
     {
      $layer = "${class}::$layer";
     }
-   eval "require $layer";
+   eval { require $layer =~ s{::}{/}gr . '.pm' };
    warn $@ if $@;
   }
 }
index 18c2028..3987a79 100644 (file)
@@ -6,7 +6,7 @@ BEGIN {
        skip_all_without_perlio();
 }
 
-plan tests => 45;
+plan tests => 46;
 
 use_ok('PerlIO');
 
@@ -216,6 +216,14 @@ EOP
                    'Mutal recursion between Perl_load_module and PerlIO_find_layer croaks');
 }
 
+{
+    # RT #119287
+    $main::PerlIO_code_injection = 0;
+    local $SIG{__WARN__} = sub {};
+    PerlIO->import('via; $main::PerlIO_code_injection = 1');
+    ok !$main::PerlIO_code_injection, "Can't inject code via PerlIO->import";
+}
+
 END {
     unlink_all $txt;
     unlink_all $bin;