TODO test for index() of a tainted constant
authorNiko Tyni <ntyni@debian.org>
Fri, 17 Apr 2009 18:11:08 +0000 (21:11 +0300)
committerDavid Mitchell <davem@iabyn.com>
Tue, 28 Jun 2011 15:23:36 +0000 (16:23 +0100)
As reported by Adrian Irving-Beer in <http://bugs.debian.org/291450>,
this unexpectedly throws a fatal taint error:

    #!/usr/bin/perl -T
    use constant C_A => $ARGV[0];
    use constant C_B => $ARGV[1];
    index(C_A, C_B);
    open(FOO, "-|");

The TODO test is reduced from the above.

t/op/taint.t

index 0c9c2d0..edbdf49 100644 (file)
@@ -17,7 +17,7 @@ BEGIN {
 use strict;
 use Config;
 
-plan tests => 780;
+plan tests => 784;
 
 $| = 1;
 
@@ -2168,6 +2168,21 @@ end
     }
 }
 
+
+# tainted constants and index()
+#  RT 64804; http://bugs.debian.org/291450
+{
+    ok(tainted $old_env_path, "initial taintedness");
+    BEGIN { no strict 'refs'; my $v = $old_env_path; *{"::C"} = sub () { $v }; }
+    ok(tainted C, "constant is tainted properly");
+    ok(!tainted "", "tainting not broken yet");
+    index(undef, C);
+    local $::TODO = 'breaks when fbm_compile() is called';
+    ok(!tainted "", "tainting still works after index() of the constant");
+}
+
+
+
 # This may bomb out with the alarm signal so keep it last
 SKIP: {
     skip "No alarm()"  unless $Config{d_alarm};