1#!./perl -Tw 2 3BEGIN { 4 chdir 't' if -d 't'; 5 @INC = '../lib'; 6 require Config; import Config; 7 if ($^O ne 'VMS' and $Config{'extensions'} !~ /\bPOSIX\b/) { 8 print "1..0\n"; 9 exit 0; 10 } 11} 12 13use Test::More tests => 7; 14use Scalar::Util qw/tainted/; 15 16 17use POSIX qw(fcntl_h open read mkfifo); 18use strict ; 19 20$| = 1; 21 22my $buffer; 23my @buffer; 24my $testfd; 25 26# Sources of taint: 27# The empty tainted value, for tainting strings 28 29my $TAINT = substr($^X, 0, 0); 30 31my $file = 'TEST'; 32 33eval { mkfifo($TAINT. $file, 0) }; 34like($@, qr/^Insecure dependency/, 'mkfifo with tainted data'); 35 36eval { $testfd = open($TAINT. $file, O_WRONLY, 0) }; 37like($@, qr/^Insecure dependency/, 'open with tainted data'); 38 39eval { $testfd = open($file, O_RDONLY, 0) }; 40is($@, "", 'open with untainted data'); 41 42read($testfd, $buffer, 2) if $testfd > 2; 43is( $buffer, "#!", ' read' ); 44ok(tainted($buffer), ' scalar tainted'); 45 46TODO: { 47 local $TODO = "POSIX::read won't taint an array element"; 48 49 read($testfd, $buffer[1], 2) if $testfd > 2; 50 51 is( $buffer[1], "./", ' read' ); 52 ok(tainted($buffer[1]), ' array element tainted'); 53} 54