Commit | Line | Data |
6e592b3a |
1 | #!./perl |
2 | |
3 | # Test that various IO functions don't try to treat PVBMs as |
4 | # filehandles. Most of these will segfault perl if they fail. |
5 | |
6 | BEGIN { |
7 | chdir 't' if -d 't'; |
8 | @INC = qw(. ../lib); |
9 | require "./test.pl"; |
10 | } |
11 | |
12 | BEGIN { $| = 1 } |
13 | |
14 | plan(28); |
15 | |
16 | sub PVBM () { 'foo' } |
17 | { my $dummy = index 'foo', PVBM } |
18 | |
19 | { |
20 | my $which; |
21 | { |
22 | package Tie; |
23 | |
24 | sub TIEHANDLE { $which = 'TIEHANDLE' } |
25 | sub TIESCALAR { $which = 'TIESCALAR' } |
26 | } |
27 | my $pvbm = PVBM; |
28 | |
29 | tie $pvbm, 'Tie'; |
30 | is ($which, 'TIESCALAR', 'PVBM gets TIESCALAR'); |
31 | } |
32 | |
33 | { |
34 | my $pvbm = PVBM; |
35 | ok (scalar eval { untie $pvbm; 1 }, 'untie(PVBM) doesn\'t segfault'); |
36 | ok (scalar eval { tied $pvbm; 1 }, 'tied(PVBM) doesn\'t segfault'); |
37 | } |
38 | |
39 | { |
40 | my $pvbm = PVBM; |
41 | |
42 | ok (scalar eval { pipe $pvbm, PIPE; }, 'pipe(PVBM, ) succeeds'); |
43 | close foo; |
44 | close PIPE; |
45 | ok (scalar eval { pipe PIPE, $pvbm; }, 'pipe(, PVBM) succeeds'); |
46 | close foo; |
47 | close PIPE; |
48 | ok (!eval { pipe \$pvbm, PIPE; }, 'pipe(PVBM ref, ) fails'); |
49 | ok (!eval { pipe PIPE, \$pvbm; }, 'pipe(, PVBM ref) fails'); |
50 | |
51 | ok (!eval { truncate $pvbm, 0 }, 'truncate(PVBM) fails'); |
52 | ok (!eval { truncate \$pvbm, 0}, 'truncate(PVBM ref) fails'); |
53 | |
54 | ok (!eval { stat $pvbm }, 'stat(PVBM) fails'); |
55 | ok (!eval { stat \$pvbm }, 'stat(PVBM ref) fails'); |
56 | |
57 | ok (!eval { lstat $pvbm }, 'lstat(PVBM) fails'); |
58 | ok (!eval { lstat \$pvbm }, 'lstat(PVBM ref) fails'); |
59 | |
60 | ok (!eval { chdir $pvbm }, 'chdir(PVBM) fails'); |
61 | ok (!eval { chdir \$pvbm }, 'chdir(pvbm ref) fails'); |
62 | |
63 | ok (!eval { close $pvbm }, 'close(PVBM) fails'); |
64 | ok (!eval { close $pvbm }, 'close(PVBM ref) fails'); |
65 | |
66 | ok (!eval { chmod 0600, $pvbm }, 'chmod(PVBM) fails'); |
67 | ok (!eval { chmod 0600, \$pvbm }, 'chmod(PVBM ref) fails'); |
68 | |
69 | ok (!eval { chown 0, 0, $pvbm }, 'chown(PVBM) fails'); |
70 | ok (!eval { chown 0, 0, \$pvbm }, 'chown(PVBM ref) fails'); |
71 | |
72 | ok (!eval { utime 0, 0, $pvbm }, 'utime(PVBM) fails'); |
73 | ok (!eval { utime 0, 0, \$pvbm }, 'utime(PVBM ref) fails'); |
74 | |
75 | ok (!eval { <$pvbm> }, '<PVBM> fails'); |
76 | ok (!eval { readline $pvbm }, 'readline(PVBM) fails'); |
77 | ok (!eval { readline \$pvbm }, 'readline(PVBM ref) fails'); |
78 | |
79 | ok (!eval { open $pvbm, '<', 'none.such' }, 'open(PVBM) fails'); |
80 | ok (!eval { open \$pvbm, '<', 'none.such', }, 'open(PVBM ref) fails'); |
81 | } |