xref: /openbsd/gnu/usr.bin/perl/ext/POSIX/t/taint.t (revision 404b540a)
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