use File::Spec::Functions;
BEGIN { require './test.pl'; }
-plan tests => 238;
+plan tests => 244;
$| = 1;
{
$ENV{'DCL$PATH'} = '' if $Is_VMS;
+ if ($Is_MSWin32 && $Config{ccname} =~ /bcc32/ && ! -f 'cc3250mt.dll') {
+ my $bcc_dir;
+ foreach my $dir (split /$Config{path_sep}/, $ENV{PATH}) {
+ if (-f "$dir/cc3250mt.dll") {
+ $bcc_dir = $dir and last;
+ }
+ }
+ if (defined $bcc_dir) {
+ require File::Copy;
+ File::Copy::copy("$bcc_dir/cc3250mt.dll", '.') or
+ die "$0: failed to copy cc3250mt.dll: $!\n";
+ eval q{
+ END { unlink "cc3250mt.dll" }
+ };
+ }
+ }
+
$ENV{PATH} = '';
delete @ENV{@MoreEnv};
$ENV{TERM} = 'dumb';
test $@ =~ /^Insecure \$ENV{DCL\$PATH}/, $@;
SKIP: {
skip q[can't find world-writeable directory to test DCL$PATH], 2
- if $tmp;
+ unless $tmp;
$ENV{'DCL$PATH'} = $tmp;
test eval { `$echo 1` } eq '';
test not any_tainted @bar;
}
}
+
+# at scope exit, a restored localised value should have its old
+# taint status, not the taint status of the current statement
+
+{
+ our $x99 = $^X;
+ test tainted $x99;
+
+ $x99 = '';
+ test not tainted $x99;
+
+ my $c = do { local $x99; $^X };
+ test not tainted $x99;
+}
+{
+ our $x99 = $^X;
+ test tainted $x99;
+
+ my $c = do { local $x99; '' };
+ test tainted $x99;
+}
+
+# an mg_get of a tainted value during localization shouldn't taint the
+# statement
+
+{
+ eval { local $0, eval '1' };
+ test $@ eq '';
+}