summaryrefslogtreecommitdiff
path: root/t/run
diff options
context:
space:
mode:
authorChristoph Lamprecht <ch.l.ngre@online.de>2009-05-11 14:00:11 -0700
committerJan Dubois <jand@activestate.com>2009-05-13 14:32:28 -0700
commit36f064bc37569629cfa8ffed15497f849ae8ccfa (patch)
tree7edeef9832ea598cb5c3662d7283856cdd9e6c3c /t/run
parent56d86adf5b9b1c05ea2f24c084864c043d30d101 (diff)
downloadperl-36f064bc37569629cfa8ffed15497f849ae8ccfa.tar.gz
do/require don't treat '.\foo' or '..\foo' as "absolute paths" on Windows.
Both 'do' and 'require' treat paths *explicitly* relative to the current directory (starting with './' or '../') as a special form of absolute path. That means they can be loaded directly and don't need to be resolved via @INC, so they don't rely on '.' being in @INC (unless running in taint mode). This behavior is "documented" in the P5P thread "Coderefs in @INC" from 2002. The code is missing special treatment of backslashes on Windows so that '.\\' and '..\\' are handled in the same manner. This change fixes http://rt.perl.org/rt3/Public/Bug/Display.html?id=63492 (Note that the references to taint mode in the bug report are only relevant as far as taint mode removes '.' from @INC). This change also fixes the following Scalar-List-Utils bug report: http://rt.cpan.org/Public/Bug/Display.html?id=25430 The Scalar::Util test failure in t/p_tainted.t only manifests itself under Test::Harness 3, and only outside the Perl core: * Test::Harness 2 (erroneously) puts '-I.' on the commandline in taint mode and runs something like this: `perl -I. t/p_tainted.t` so '.\t\tainted.t' can be found via '.' in @INC. * Core Perl runs something like this from the t/ directory: `..\perl.exe -I../lib ../ext/List-Util/t/p_tainted.t` so '.\..\ext\List-Util\t\tained.t' can be found via '../lib' in @INC. Signed-off-by: Jan Dubois <jand@activestate.com>
Diffstat (limited to 't/run')
-rw-r--r--t/run/switcht.t22
1 files changed, 21 insertions, 1 deletions
diff --git a/t/run/switcht.t b/t/run/switcht.t
index 564b2f3671..6f0fed5177 100644
--- a/t/run/switcht.t
+++ b/t/run/switcht.t
@@ -6,7 +6,7 @@ BEGIN {
require './test.pl';
}
-plan tests => 11;
+plan tests => 13;
my $Perl = which_perl();
@@ -44,3 +44,23 @@ like( $warning, qr/^Insecure dependency in unlink $Tmsg/,
ok( !-e $file, 'unlink worked' );
ok( !$^W, "-t doesn't enable regular warnings" );
+
+
+mkdir('tt');
+open(FH,'>','tt/ttest.pl')or DIE $!;
+print FH 'return 42';
+close FH or DIE $!;
+
+SKIP: {
+ ($^O eq 'MSWin32') || skip('skip tainted do test with \ seperator');
+ my $test = 0;
+ $test = do '.\tt/ttest.pl';
+ is($test, 42, 'Could "do" .\tt/ttest.pl');
+}
+{
+ my $test = 0;
+ $test = do './tt/ttest.pl';
+ is($test, 42, 'Could "do" ./tt/ttest.pl');
+}
+unlink ('./tt/ttest.pl');
+rmdir ('tt');