X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F54taint.t;h=6b866e6d170f5bdce47c2a82d2b82828fcfb7210;hb=534521dac62f6ab58e83a42d4e8e3cb586db464b;hp=9f299ba9225f48c3f1865bcbb8d540cb0eca68ed;hpb=f2d11f4aef9b6c116351f0ee327a46551fcd190f;p=dbsrgits%2FDBIx-Class-Historic.git diff --git a/t/54taint.t b/t/54taint.t index 9f299ba..6b866e6 100644 --- a/t/54taint.t +++ b/t/54taint.t @@ -1,16 +1,52 @@ -#!/usr/bin/env perl -T - -# the above line forces Test::Harness into taint-mode -# DO NOT REMOVE - use strict; use warnings; +use Config; + +# there is talk of possible perl compilations where -T is fatal or just +# doesn't work. We don't want to have the user deal with that. +BEGIN { unless ($INC{'t/lib/DBICTest/WithTaint.pm'}) { + + if ( $^O eq 'MSWin32' and $^X =~ /\x20/ ) { + print "1..0 # SKIP Running this test on Windows with spaces within the perl executable path (\$^X) is not possible due to https://rt.perl.org/Ticket/Display.html?id=123907\n"; + exit 0; + } + + # it is possible the test itself is initially invoked in taint mode + # and with relative paths *and* with a relative $^X and some other + # craziness... in short: just be proactive + require File::Spec; + + if (length $ENV{PATH}) { + ( $ENV{PATH} ) = join ( $Config{path_sep}, + map { length($_) ? File::Spec->rel2abs($_) : () } + split /\Q$Config{path_sep}/, $ENV{PATH} + ) =~ /\A(.+)\z/; + } + + my ($perl) = $^X =~ /\A(.+)\z/; + + { + local $ENV{PATH} = "/nosuchrootbindir"; + system( $perl => -T => -e => ' + use warnings; + use strict; + eval { my $x = $ENV{PATH} . (kill (0)); 1 } or exit 42; + exit 0; + '); + } + + if ( ($? >> 8) != 42 ) { + print "1..0 # SKIP Your perl does not seem to like/support -T...\n"; + exit 0; + } + + exec( $perl, qw( -I. -Mt::lib::DBICTest::WithTaint -T ), __FILE__ ); +}} # When in taint mode, PERL5LIB is ignored (but *not* unset) # Put it back in INC so that local-lib users can actually # run this test. Use lib.pm instead of an @INC unshift as # it will correctly add any arch subdirs encountered -use Config; use lib ( grep { length } @@ -35,7 +71,7 @@ throws_ok ( sub { $ENV{PATH} . (kill (0)) }, qr/Insecure dependency in kill/, 'taint mode active' -); +) if length $ENV{PATH}; { package DBICTest::Taint::Classes;