This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
dist/: remove . from @INC when loading optional modules
authorTony Cook <tony@develop-help.com>
Thu, 23 Jun 2016 04:06:40 +0000 (14:06 +1000)
committerTony Cook <tony@develop-help.com>
Tue, 26 Jul 2016 05:36:32 +0000 (15:36 +1000)
I didn't update base.pm since that seems more likely to be loading
modules *expected* to be in the current directory.  Opinions
welcome.

dist/I18N-LangTags/lib/I18N/LangTags/Detect.pm
dist/IO/IO.pm
dist/Locale-Maketext/lib/Locale/Maketext.pm
dist/Net-Ping/lib/Net/Ping.pm
dist/PathTools/Cwd.pm
dist/PathTools/lib/File/Spec/Cygwin.pm
dist/PathTools/lib/File/Spec/VMS.pm
dist/PathTools/lib/File/Spec/Win32.pm
dist/Storable/Storable.pm
dist/Test/lib/Test.pm
dist/base/lib/base.pm

index f13d546..e9c3aaa 100644 (file)
@@ -145,6 +145,8 @@ sub _try_use {   # Basically a wrapper around "require Modulename"
   print " About to use $module ...\n" if DEBUG;
   {
     local $SIG{'__DIE__'};
+    local @INC = @INC;
+    pop @INC if $INC[-1] eq '.';
     eval "require $module"; # used to be "use $module", but no point in that.
   }
   if($@) {
index de3e991..833f1a2 100644 (file)
@@ -18,6 +18,8 @@ sub import {
     
     my @l = @_ ? @_ : qw(Handle Seekable File Pipe Socket Dir);
 
+    local @INC = @INC;
+    pop @INC if $INC[-1] eq '.';
     eval join("", map { "require IO::" . (/(\w+)/)[0] . ";\n" } @l)
        or croak $@;
 }
index 823c8d7..0c99641 100644 (file)
@@ -499,6 +499,8 @@ sub _try_use {   # Basically a wrapper around "require Modulename"
 
     local $SIG{'__DIE__'};
     local $@;
+    local @INC = @INC;
+    pop @INC if $INC[-1] eq '.';
     eval "require $module"; # used to be "use $module", but no point in that.
 
     if($@) {
index 2766c9e..c9cbd27 100644 (file)
@@ -410,7 +410,11 @@ sub ping_external {
       $timeout            # Seconds after which ping times out
      ) = @_;
 
-  eval { require Net::Ping::External; }
+  eval {
+    local @INC = @INC;
+    pop @INC if $INC[-1] eq '.';
+    require Net::Ping::External;
+  }
     or croak('Protocol "external" not supported on your system: Net::Ping::External not found');
   return Net::Ping::External::ping(ip => $ip, timeout => $timeout);
 }
index e181219..e9f9d61 100644 (file)
@@ -40,7 +40,10 @@ if ($^O eq 'os2') {
 my $use_vms_feature;
 BEGIN {
     if ($^O eq 'VMS') {
-        if (eval { local $SIG{__DIE__}; require VMS::Feature; }) {
+        if (eval { local $SIG{__DIE__};
+                   local @INC = @INC;
+                   pop @INC if $INC[-1] eq '.';
+                   require VMS::Feature; }) {
             $use_vms_feature = 1;
         }
     }
index d8d532e..e137507 100644 (file)
@@ -137,7 +137,11 @@ sub case_tolerant {
   if ($mntopts and ($mntopts =~ /,managed/)) {
     return 0;
   }
-  eval { require Win32API::File; } or return 1;
+  eval {
+      local @INC = @INC;
+      pop @INC if $INC[-1] eq '.';
+      require Win32API::File;
+  } or return 1;
   my $osFsType = "\0"x256;
   my $osVolName = "\0"x256;
   my $ouFsFlags = 0;
index a4b1d89..40bc08a 100644 (file)
@@ -39,7 +39,10 @@ via the C<DECC$FILENAME_UNIX_REPORT> CRTL feature.
 
 my $use_feature;
 BEGIN {
-    if (eval { local $SIG{__DIE__}; require VMS::Feature; }) {
+    if (eval { local $SIG{__DIE__};
+               local @INC = @INC;
+               pop @INC if $INC[-1] eq '.';
+               require VMS::Feature; }) {
         $use_feature = 1;
     }
 }
index 280e8ec..d810283 100644 (file)
@@ -90,7 +90,11 @@ Default: 1
 =cut
 
 sub case_tolerant {
-  eval { require Win32API::File; } or return 1;
+  eval {
+    local @INC = @INC;
+    pop @INC if $INC[-1] eq '.';
+    require Win32API::File;
+  } or return 1;
   my $drive = shift || "C:";
   my $osFsType = "\0"x256;
   my $osVolName = "\0"x256;
index c8f6db1..541776d 100644 (file)
@@ -25,7 +25,13 @@ use vars qw($canonical $forgive_me $VERSION);
 $VERSION = '2.56';
 
 BEGIN {
-    if (eval { local $SIG{__DIE__}; require Log::Agent; 1 }) {
+    if (eval {
+        local $SIG{__DIE__};
+        local @INC = @INC;
+        pop @INC if $INC[-1] eq '.';
+        require Log::Agent;
+        1;
+    }) {
         Log::Agent->import;
     }
     #
index de20922..d75b0cc 100644 (file)
@@ -505,7 +505,12 @@ sub _diff_complain {
     my($result, $expected, $detail, $prefix) = @_;
     return _diff_complain_external(@_) if $ENV{PERL_TEST_DIFF};
     return _diff_complain_algdiff(@_)
-     if eval { require Algorithm::Diff; Algorithm::Diff->VERSION(1.15); 1; };
+      if eval {
+          local @INC = @INC;
+          pop @INC if $INC[-1] eq '.';
+          require Algorithm::Diff; Algorithm::Diff->VERSION(1.15);
+          1;
+      };
 
     $told_about_diff++ or print $TESTERR <<"EOT";
 # $prefix   (Install the Algorithm::Diff module to have differences in multiline
index 6fee600..c95c2db 100644 (file)
@@ -97,7 +97,11 @@ sub import {
             {
                 local $SIG{__DIE__};
                 my $fn = _module_to_filename($base);
-                eval { require $fn };
+                eval {
+                    local @INC = @INC;
+                    pop @INC if $INC[-1] eq '.';
+                    require $fn
+                };
                 # Only ignore "Can't locate" errors from our eval require.
                 # Other fatal errors (syntax etc) must be reported.
                 #