X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F54taint.t;h=7f0db9aa75186d7d182902356600e5860b31d6e4;hb=66a65d81075460c8508f300b26209bc77cbed6d6;hp=9f299ba9225f48c3f1865bcbb8d540cb0eca68ed;hpb=f2d11f4aef9b6c116351f0ee327a46551fcd190f;p=dbsrgits%2FDBIx-Class.git diff --git a/t/54taint.t b/t/54taint.t index 9f299ba..7f0db9a 100644 --- a/t/54taint.t +++ b/t/54taint.t @@ -1,16 +1,47 @@ -#!/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'}) { + + # 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 +66,7 @@ throws_ok ( sub { $ENV{PATH} . (kill (0)) }, qr/Insecure dependency in kill/, 'taint mode active' -); +) if length $ENV{PATH}; { package DBICTest::Taint::Classes;