%PDF- %PDF-
Direktori : /lib64/perl5/vendor_perl/Taint/ |
Current File : //lib64/perl5/vendor_perl/Taint/is_taint_bench.pl |
#!/usr/bin/perl -w use strict; use Benchmark qw(timethese cmpthese countit timestr); use Taint::Runtime qw($TAINT taint); $TAINT = 1; sub is1 { return if ! defined $_[0]; ! eval { eval '#'.substr($_[0], 0, 0); 1 } } sub is2 { local $^W = 0; local $@; eval { kill 0 * $_[0] }; $@ =~ /^Insecure/ } sub is3 { local $^W = 0; ! eval { my $t = 0 * $_[0]; eval("1 + $t") } } my $var_bad = taint("foo"); my $var_ok = "bar"; my $var_und = undef; print is1($var_bad) ? "Correct\n" : "Wrong\n"; print is2($var_bad) ? "Correct\n" : "Wrong\n"; print is3($var_bad) ? "Correct\n" : "Wrong\n"; print is1($var_ok) ? "Wrong\n" : "Correct\n"; print is2($var_ok) ? "Wrong\n" : "Correct\n"; print is3($var_ok) ? "Wrong\n" : "Correct\n"; print is1($var_und) ? "Wrong\n" : "Correct\n"; print is2($var_und) ? "Wrong\n" : "Correct\n"; print is3($var_und) ? "Wrong\n" : "Correct\n"; foreach my $var ($var_ok, $var_bad, $var_und) { print "Run: ".(! $var ? "Undefined" : $var eq 'foo' ? 'Tainted' : 'Untainted')."\n"; cmpthese (-2,{ is1 => sub { is1($var) }, is2 => sub { is2($var) }, is3 => sub { is3($var) }, },'auto'); } __END__ ### Perl 5.8.5 Mandrake 10.1 1.4 Mobile # Run: Untainted # Benchmark: running is1, is2, is3 for at least 2 CPU seconds... # is1: 3 wallclock secs ( 2.04 usr + 0.00 sys = 2.04 CPU) @ 40906.86/s (n=83450) # is2: 1 wallclock secs ( 2.12 usr + 0.00 sys = 2.12 CPU) @ 147537.74/s (n=312780) # is3: 2 wallclock secs ( 2.10 usr + 0.00 sys = 2.10 CPU) @ 29252.38/s (n=61430) # Rate is3 is1 is2 # is3 29252/s -- -28% -80% # is1 40907/s 40% -- -72% # is2 147538/s 404% 261% -- # Run: Tainted # Benchmark: running is1, is2, is3 for at least 2 CPU seconds... # is1: 2 wallclock secs ( 2.13 usr + 0.00 sys = 2.13 CPU) @ 67086.85/s (n=142895) # is2: 2 wallclock secs ( 2.02 usr + 0.00 sys = 2.02 CPU) @ 52951.49/s (n=106962) # is3: 3 wallclock secs ( 2.07 usr + 0.00 sys = 2.07 CPU) @ 48884.06/s (n=101190) # Rate is3 is2 is1 # is3 48884/s -- -8% -27% # is2 52951/s 8% -- -21% # is1 67087/s 37% 27% -- # Run: Undefined # Benchmark: running is1, is2, is3 for at least 2 CPU seconds... # is1: 1 wallclock secs ( 2.02 usr + 0.00 sys = 2.02 CPU) @ 40643.56/s (n=82100) # is2: 2 wallclock secs ( 2.16 usr + 0.00 sys = 2.16 CPU) @ 111499.07/s (n=240838) # is3: 2 wallclock secs ( 2.04 usr + 0.00 sys = 2.04 CPU) @ 26348.04/s (n=53750) # Rate is3 is1 is2 # is3 26348/s -- -35% -76% # is1 40644/s 54% -- -64% # is2 111499/s 323% 174% -