summaryrefslogtreecommitdiff
path: root/lib/perl5db.t
diff options
context:
space:
mode:
authorDavid Mitchell <davem@iabyn.com>2010-08-25 12:15:41 +0100
committerDavid Mitchell <davem@iabyn.com>2010-08-25 12:15:41 +0100
commit07004ebbe530fe5ce1c67e63c0b8e1c0aa77b3b9 (patch)
tree1edfd5adf69112c113382f0ad93608189dee10d1 /lib/perl5db.t
parent3f9bb6b034fc3e91c3576718cf4783d1f5fa55f9 (diff)
downloadperl-07004ebbe530fe5ce1c67e63c0b8e1c0aa77b3b9.tar.gz
don't taint $DB::sub
[perl #76872] showed a case where code like the following, run under -d, would cause $DB::sub to get set: $tainted_expression && func() The tainted expression sets PL_tainted, so calling func() under -d, which sets $DB::sub, causes it to get tainted. Consequently any further sub calls would set PL_tainted while getting the old value of $DB::sub (and cause the new value to be tainted too), and if the sub was XS, then its code would be executed with PL_tainted set. It isn't an issue with perl subs as the first nextstate op resets PL_tainted.
Diffstat (limited to 'lib/perl5db.t')
-rw-r--r--lib/perl5db.t11
1 files changed, 10 insertions, 1 deletions
diff --git a/lib/perl5db.t b/lib/perl5db.t
index 3f68759efe..b2f72661c6 100644
--- a/lib/perl5db.t
+++ b/lib/perl5db.t
@@ -27,7 +27,7 @@ my $dev_tty = '/dev/tty';
}
}
-plan(8);
+plan(9);
sub rc {
open RC, ">", ".perldb" or die $!;
@@ -167,6 +167,15 @@ SKIP: {
like($output, "All tests successful.", "[perl #66110]");
}
+# taint tests
+
+{
+ local $ENV{PERLDB_OPTS} = "ReadLine=0 NonStop=1";
+ my $output = runperl(switches => [ '-d', '-T' ], stderr => 1,
+ progfile => '../lib/perl5db/t/taint');
+ is($output, '[$^X][done]', "taint");
+}
+
# clean up.