xref: /openbsd/gnu/usr.bin/perl/lib/builtin-taint.t (revision 5486feef)
1*5486feefSafresh1#!./perl -T
2*5486feefSafresh1
3*5486feefSafresh1BEGIN {
4*5486feefSafresh1    chdir 't' if -d 't';
5*5486feefSafresh1    require './test.pl';
6*5486feefSafresh1    set_up_inc('../lib');
7*5486feefSafresh1}
8*5486feefSafresh1
9*5486feefSafresh1use v5.36;
10*5486feefSafresh1no warnings 'experimental::builtin';
11*5486feefSafresh1
12*5486feefSafresh1package FetchStoreCounter {
13*5486feefSafresh1    sub TIESCALAR($class, @args) { bless \@args, $class }
14*5486feefSafresh1
15*5486feefSafresh1    sub FETCH($self)    { $self->[0]->$*++ }
16*5486feefSafresh1    sub STORE($self, $) { $self->[1]->$*++ }
17*5486feefSafresh1}
18*5486feefSafresh1
19*5486feefSafresh1# is_tainted
20*5486feefSafresh1{
21*5486feefSafresh1    use builtin qw( is_tainted );
22*5486feefSafresh1
23*5486feefSafresh1    is(is_tainted($0), !!${^TAINT}, "\$0 is tainted (if tainting is supported)");
24*5486feefSafresh1    ok(!is_tainted($1), "\$1 isn't tainted");
25*5486feefSafresh1
26*5486feefSafresh1    # Invokes magic
27*5486feefSafresh1    tie my $tied, FetchStoreCounter => (\my $fetchcount, \my $storecount);
28*5486feefSafresh1
29*5486feefSafresh1    my $_dummy = is_tainted($tied);
30*5486feefSafresh1    is($fetchcount, 1, 'is_tainted() invokes FETCH magic');
31*5486feefSafresh1
32*5486feefSafresh1    $tied = is_tainted($0);
33*5486feefSafresh1    is($storecount, 1, 'is_tainted() invokes STORE magic');
34*5486feefSafresh1
35*5486feefSafresh1    is(prototype(\&builtin::is_tainted), '$', 'is_tainted prototype');
36*5486feefSafresh1}
37*5486feefSafresh1
38*5486feefSafresh1# vim: tabstop=4 shiftwidth=4 expandtab autoindent softtabstop=4
39*5486feefSafresh1
40*5486feefSafresh1done_testing();
41