summaryrefslogtreecommitdiff
path: root/cpan/dist/PathTools/t/taint.t
diff options
context:
space:
mode:
Diffstat (limited to 'cpan/dist/PathTools/t/taint.t')
-rw-r--r--cpan/dist/PathTools/t/taint.t53
1 files changed, 53 insertions, 0 deletions
diff --git a/cpan/dist/PathTools/t/taint.t b/cpan/dist/PathTools/t/taint.t
new file mode 100644
index 00000000..48f8c5bc
--- /dev/null
+++ b/cpan/dist/PathTools/t/taint.t
@@ -0,0 +1,53 @@
+#!./perl -Tw
+# Testing Cwd under taint mode.
+
+use strict;
+
+use Cwd;
+chdir 't' unless $ENV{PERL_CORE};
+
+use File::Spec;
+use lib File::Spec->catdir('t', 'lib');
+use Test::More;
+BEGIN {
+ plan(
+ ${^TAINT}
+ ? (tests => 21)
+ : (skip_all => "A perl without taint support")
+ );
+}
+
+use Scalar::Util qw/tainted/;
+
+my @Functions = qw(getcwd cwd fastcwd fastgetcwd
+ abs_path fast_abs_path
+ realpath fast_realpath
+ );
+
+foreach my $func (@Functions) {
+ no strict 'refs';
+ my $cwd;
+ eval { $cwd = &{'Cwd::'.$func} };
+ is( $@, '', "$func() should not explode under taint mode" );
+ ok( tainted($cwd), "its return value should be tainted" );
+}
+
+# Previous versions of Cwd tainted $^O
+is !tainted($^O), 1, "\$^O should not be tainted";
+
+{
+ # [perl #126862] canonpath() loses taint
+ my $tainted = substr($ENV{PATH}, 0, 0);
+ # yes, getcwd()'s result should be tainted, and is tested above
+ # but be sure
+ ok tainted(File::Spec->canonpath($tainted . Cwd::getcwd)),
+ "canonpath() keeps taint on non-empty string";
+ ok tainted(File::Spec->canonpath($tainted)),
+ "canonpath() keeps taint on empty string";
+
+ (Cwd::getcwd() =~ /^(.*)/);
+ my $untainted = $1;
+ ok !tainted($untainted), "make sure our untainted value is untainted";
+ ok !tainted(File::Spec->canonpath($untainted)),
+ "canonpath() doesn't add taint to untainted string";
+}