Blame is_taint_bench.pl

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