Condition Coverage

File:blib/lib/CGI/Info.pm
Coverage:68.0%

line%coveragecondition
166100
Adec
00
11
$params ||= {}
17520
ABCDdec
0XXX0
10XX0
110X0
11100
11111
&Scalar::Util::blessed($params->{'logger'}) and $params->{'logger'}->can("warn") and $params->{'logger'}->can("info") and $params->{'logger'}->can("error")
2480
ABdec
0X0
100
111
require File::Basename and "File::Basename"->import
25167
ABdec
000
011
1X1
$self->_get_env("SCRIPT_NAME") // $0
268100
ABdec
0X0
100
111
"File::Spec"->file_name_is_absolute($script_name) and -r $script_name
39467
ABdec
0X0
100
111
$self->{'site'} and $self->{'cgi_site'}
397100
ABdec
000
011
1X1
$ENV{'HTTP_HOST'} || $ENV{'SERVER_NAME'} || $ENV{'SSL_TLS_SNI'}
40680
ABCDdec
0XXX0
10XX0
110X0
11100
11111
$ENV{'SERVER_NAME'} and $host eq $ENV{'SERVER_NAME'} and my $protocol = $self->protocol and $self->protocol ne "http"
41833
ABdec
000
011
1X1
$self->{'site'} ||= $self->{'cgi_site'}
421100
Adec
00
11
$self->protocol || 'http'
42433
ABdec
0X0
100
111
$self->{'site'} and $self->{'cgi_site'}
634100
ABCdec
0XX0
1000
1011
11X1
defined $self->{'paramref'} and !defined($params->{'allow'}) || defined $self->{'allow'} && $params->{'allow'} eq $self->{'allow'}
661100
ABdec
000
011
1X1
$ENV{'REQUEST_METHOD'} eq "GET" or $ENV{'REQUEST_METHOD'} eq "HEAD"
67
ABdec
0X0
100
111
$ENV{'GATEWAY_INTERFACE'} && $ENV{'REQUEST_METHOD'}
70667
ABdec
0X0
100
111
defined $content_type and $content_type =~ m[multipart/form-data]i
722100
ABdec
000
011
1X1
not defined $content_length or $content_length =~ /\D/
726100
ABdec
0X0
100
111
$self->{'max_upload_size'} >= 0 and $content_length > $self->{'max_upload_size'}
734100
ABdec
000
011
1X1
not defined $content_type or $content_type =~ m[application/x-www-form-urlencoded]
82633
ABdec
0X0
100
111
require JSON::MaybeXS and "JSON::MaybeXS"->import
970100
ABdec
000
011
1X1
not defined $ENV{'REQUEST_METHOD'} or $ENV{'REQUEST_METHOD'} eq "GET"
98067
ABdec
000
011
1X1
index($orig_value, q[']) != -1 || index($orig_value, '%27') != -1
98133
ABdec
000
011
1X1
index($orig_value, '#') != -1 || index($orig_value, '%23') != -1
98267
ABdec
000
011
1X1
index($orig_value, '=') != -1 || index($orig_value, '%3D') != -1
98367
ABdec
000
011
1X1
index($orig_value, ';') != -1 || index($orig_value, '%3B') != -1
98980
ABCDdec
000X0
00100
00111
01XX1
1XXX1
$has_quote or $has_hash or $has_equals and $has_dash
9906
ABCDEFGHIdec
00XXX0X0X0
00XXX0X100
00XXX0X111
00XXX100X0
00XXX10100
00XXX10111
00XXX11XX1
0100X0X0X0
0100X0X100
0100X0X111
0100X100X0
0100X10100
0100X10111
0100X11XX1
010100X0X0
010100X100
010100X111
01010100X0
0101010100
0101010111
0101011XX1
01011XXXX1
011X00X0X0
011X00X100
011X00X111
011X0100X0
011X010100
011X010111
011X011XX1
011X1XXXX1
1XXXXXXXX1
$orig_value =~ /(\%27)|(\')|(\%23)|(\#)/xi or $has_equals and $has_quote || $has_semi || $has_dash and $orig_value =~ /((\%3D)|(=))[^-]*+((\%27)|(\')|(\-\-)|(\%3B)|(;))/i or $has_quote and $orig_value =~ /\w*((\%27)|(\'))((\%6F)|o|(\%4F))((\%72)|r|(\%52))\s*(OR|AND|UNION|SELECT|--)/xi or $has_quote and $orig_value =~ /((\%27)|(\'))union/xi
100767
ABdec
000
011
1X1
index($orig_value, 'SELECT') != -1 || index($orig_value, 'select') != -1
101267
ABdec
000
011
1X1
index($orig_value, '/**/') != -1 || index($orig_value, '/AND/') != -1
101467
ABdec
0X0
100
111
$has_slash and $has_select
13
ABCDEFGHIJKLMNdec
0X0X0X0X0X0X0X0
0X0X0X0X0X0X100
0X0X0X0X0X0X111
0X0X0X0X0X100X0
0X0X0X0X0X10100
0X0X0X0X0X10111
0X0X0X0X0X11XX1
0X0X0X0X100X0X0
0X0X0X0X100X100
0X0X0X0X100X111
0X0X0X0X10100X0
0X0X0X0X1010100
0X0X0X0X1010111
0X0X0X0X1011XX1
0X0X0X0X11XXXX1
0X0X0X100X0X0X0
0X0X0X100X0X100
0X0X0X100X0X111
0X0X0X100X100X0
0X0X0X100X10100
0X0X0X100X10111
0X0X0X100X11XX1
0X0X0X10100X0X0
0X0X0X10100X100
0X0X0X10100X111
0X0X0X1010100X0
0X0X0X101010100
0X0X0X101010111
0X0X0X101011XX1
0X0X0X1011XXXX1
0X0X0X11XXXXXX1
0X0X100X0X0X0X0
0X0X100X0X0X100
0X0X100X0X0X111
0X0X100X0X100X0
0X0X100X0X10100
0X0X100X0X10111
0X0X100X0X11XX1
0X0X100X100X0X0
0X0X100X100X100
0X0X100X100X111
0X0X100X10100X0
0X0X100X1010100
0X0X100X1010111
0X0X100X1011XX1
0X0X100X11XXXX1
0X0X10100X0X0X0
0X0X10100X0X100
0X0X10100X0X111
0X0X10100X100X0
0X0X10100X10100
0X0X10100X10111
0X0X10100X11XX1
0X0X1010100X0X0
0X0X1010100X100
0X0X1010100X111
0X0X101010100X0
0X0X10101010100
0X0X10101010111
0X0X10101011XX1
0X0X101011XXXX1
0X0X1011XXXXXX1
0X0X11XXXXXXXX1
0X100X0X0X0X0X0
0X100X0X0X0X100
0X100X0X0X0X111
0X100X0X0X100X0
0X100X0X0X10100
0X100X0X0X10111
0X100X0X0X11XX1
0X100X0X100X0X0
0X100X0X100X100
0X100X0X100X111
0X100X0X10100X0
0X100X0X1010100
0X100X0X1010111
0X100X0X1011XX1
0X100X0X11XXXX1
0X100X100X0X0X0
0X100X100X0X100
0X100X100X0X111
0X100X100X100X0
0X100X100X10100
0X100X100X10111
0X100X100X11XX1
0X100X10100X0X0
0X100X10100X100
0X100X10100X111
0X100X1010100X0
0X100X101010100
0X100X101010111
0X100X101011XX1
0X100X1011XXXX1
0X100X11XXXXXX1
0X10100X0X0X0X0
0X10100X0X0X100
0X10100X0X0X111
0X10100X0X100X0
0X10100X0X10100
0X10100X0X10111
0X10100X0X11XX1
0X10100X100X0X0
0X10100X100X100
0X10100X100X111
0X10100X10100X0
0X10100X1010100
0X10100X1010111
0X10100X1011XX1
0X10100X11XXXX1
0X1010100X0X0X0
0X1010100X0X100
0X1010100X0X111
0X1010100X100X0
0X1010100X10100
0X1010100X10111
0X1010100X11XX1
0X101010100X0X0
0X101010100X100
0X101010100X111
0X10101010100X0
0X1010101010100
0X1010101010111
0X1010101011XX1
0X10101011XXXX1
0X101011XXXXXX1
0X1011XXXXXXXX1
0X11XXXXXXXXXX1
100X0X0X0X0X0X0
100X0X0X0X0X100
100X0X0X0X0X111
100X0X0X0X100X0
100X0X0X0X10100
100X0X0X0X10111
100X0X0X0X11XX1
100X0X0X100X0X0
100X0X0X100X100
100X0X0X100X111
100X0X0X10100X0
100X0X0X1010100
100X0X0X1010111
100X0X0X1011XX1
100X0X0X11XXXX1
100X0X100X0X0X0
100X0X100X0X100
100X0X100X0X111
100X0X100X100X0
100X0X100X10100
100X0X100X10111
100X0X100X11XX1
100X0X10100X0X0
100X0X10100X100
100X0X10100X111
100X0X1010100X0
100X0X101010100
100X0X101010111
100X0X101011XX1
100X0X1011XXXX1
100X0X11XXXXXX1
100X100X0X0X0X0
100X100X0X0X100
100X100X0X0X111
100X100X0X100X0
100X100X0X10100
100X100X0X10111
100X100X0X11XX1
100X100X100X0X0
100X100X100X100
100X100X100X111
100X100X10100X0
100X100X1010100
100X100X1010111
100X100X1011XX1
100X100X11XXXX1
100X10100X0X0X0
100X10100X0X100
100X10100X0X111
100X10100X100X0
100X10100X10100
100X10100X10111
100X10100X11XX1
100X1010100X0X0
100X1010100X100
100X1010100X111
100X101010100X0
100X10101010100
100X10101010111
100X10101011XX1
100X101011XXXX1
100X1011XXXXXX1
100X11XXXXXXXX1
10100X0X0X0X0X0
10100X0X0X0X100
10100X0X0X0X111
10100X0X0X100X0
10100X0X0X10100
10100X0X0X10111
10100X0X0X11XX1
10100X0X100X0X0
10100X0X100X100
10100X0X100X111
10100X0X10100X0
10100X0X1010100
10100X0X1010111
10100X0X1011XX1
10100X0X11XXXX1
10100X100X0X0X0
10100X100X0X100
10100X100X0X111
10100X100X100X0
10100X100X10100
10100X100X10111
10100X100X11XX1
10100X10100X0X0
10100X10100X100
10100X10100X111
10100X1010100X0
10100X101010100
10100X101010111
10100X101011XX1
10100X1011XXXX1
10100X11XXXXXX1
1010100X0X0X0X0
1010100X0X0X100
1010100X0X0X111
1010100X0X100X0
1010100X0X10100
1010100X0X10111
1010100X0X11XX1
1010100X100X0X0
1010100X100X100
1010100X100X111
1010100X10100X0
1010100X1010100
1010100X1010111
1010100X1011XX1
1010100X11XXXX1
101010100X0X0X0
101010100X0X100
101010100X0X111
101010100X100X0
101010100X10100
101010100X10111
101010100X11XX1
10101010100X0X0
10101010100X100
10101010100X111
1010101010100X0
101010101010100
101010101010111
101010101011XX1
1010101011XXXX1
10101011XXXXXX1
101011XXXXXXXX1
1011XXXXXXXXXX1
11XXXXXXXXXXXX1
$has_select and $orig_value =~ /select[[a-z]\s\*]from/xi or $has_and and $orig_value =~ /\sAND\s1=1/xi or $has_or and $has_and and $orig_value =~ /\sOR\s.*\sAND\s/ or $has_slash and $orig_value =~ m[/\*\*/ORDER/\*\*/BY/\*\*]xi or $has_dump and $orig_value =~ /var_dump[^m]*+md5/ or $has_slash and $has_select and $orig_value =~ m[/AND/[^(]*+\(SELECT/] or $has_exec and $orig_value =~ /exec(\s|\+)++(s|x)p\w+/xi
67
ABdec
0X0
100
111
$has_or and $has_and
103125
ABCDEFGdec
00000000
00000011
000001X1
00001XX1
0001XXX1
001XXXX1
01XXXXX1
1XXXXXX1
$agent =~ /SELECT.+AND.+/ or $agent =~ /ORDER BY / or $agent =~ / OR NOT / or $agent =~ / AND \d+=\d+/ or $agent =~ /THEN.+ELSE.+END/ or $agent =~ /.+AND.+SELECT.+/ or $agent =~ /\sAND\s.+\sAND\s/
104260
ABCDdec
00000
00011
001X1
01XX1
1XXX1
$value =~ m[((\%3C)|<)((\%2F)|/)*[a-z0-9\%]+((\%3E)|>)]xi or $value =~ /((\%3C)|<)[^\n]+((\%3E)|>)/i or $orig_value =~ m[((\%3C)|<)((\%2F)|/)*[a-z0-9\%]+((\%3E)|>)]xi or $orig_value =~ /((\%3C)|<)[^\n]+((\%3E)|>)/i
1065100
ABdec
0X0
100
111
$FORM{$key} and $FORM{$key} ne $value
1129100
ABdec
0X0
100
111
$self->{'allow'} and not exists $self->{'allow'}{$field}
113867
ABdec
0X0
100
111
$self->{'in_param'} and $self->{'allow'}
133767
ABdec
000
011
1X1
$agent =~ m[(android|bb\d+|meego).+mobile|avantgo|bada/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino]i or substr($ENV{'HTTP_USER_AGENT'}, 0, 4) =~ m[1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-]i
1344100
ABdec
0X0
100
111
defined $remote and $self->{'cache'}
136067
ABdec
0X0
100
111
defined $device && $device =~ /blackberry|webos|iphone|ipod|ipad|android/i
136150
ABCdec
0XX0
10X0
1100
1111
$is_mobile and $self->{'cache'} and defined $remote
1384100
ABdec
0X0
100
111
$ENV{'HTTP_USER_AGENT'} and $ENV{'HTTP_USER_AGENT'} =~ /.+(iPad|TabletPC).+/
1426100
Adec
00
11
Params::Get::get_params(undef, @_) || {}
1437100
Adec
00
11
$self->params || (return '')
145750
Adec
00
11
$rc ||= ""
1474100
ABdec
0X0
100
111
$ENV{'SCRIPT_URI'} and $ENV{'SCRIPT_URI'} =~ m[^(.+)://.+]
1477100
ABdec
0X0
100
111
$ENV{'SERVER_PROTOCOL'} and $ENV{'SERVER_PROTOCOL'} =~ m[^HTTP/]
1546100
ABdec
0X0
100
111
$ENV{'C_DOCUMENT_ROOT'} and -d $ENV{'C_DOCUMENT_ROOT'}
154867
ABdec
0X0
100
111
-d $dir and -w $dir
155233
ABdec
0X0
100
111
-d $dir and -w $dir
1556100
ABdec
0X0
100
111
$ENV{'DOCUMENT_ROOT'} and -d $ENV{'DOCUMENT_ROOT'}
155867
ABdec
0X0
100
111
-d $dir and -w $dir
1562100
ABdec
0X0
100
111
$params->{'default'} and ref $params->{'default'}
1583100
ABdec
0X0
100
111
$ENV{'DOCUMENT_ROOT'} and -d $ENV{'DOCUMENT_ROOT'}
100
ABdec
0X0
100
111
$ENV{'C_DOCUMENT_ROOT'} and -d $ENV{'C_DOCUMENT_ROOT'}
1618100
ABdec
0X0
100
111
$_[0] and ref $_[0]
1634100
ABdec
0X0
100
111
$_[0] and ref $_[0]
166575
ABCdec
0XX0
10X0
1100
1111
length $dir and -d $dir and -w $dir
167360
ABCDdec
0XXX0
10XX0
110X0
11100
11111
defined $rc and length $rc and -d $rc and -w $rc
167833
ABdec
000
011
1X1
not defined $dir or length $dir == 0
167967
ABdec
000
011
1X1
$self->{'logdir'} ||= $dir
1711100
ABdec
0X0
100
111
$remote and $agent
171738
ABCDEFGdec
00000000
00000011
000001X1
00001XX1
0001XXX1
001XXXX1
01XXXXX1
1XXXXXX1
$agent =~ /SELECT.+AND.+/ or $agent =~ /ORDER BY / or $agent =~ / OR NOT / or $agent =~ / AND \d+=\d+/ or $agent =~ /THEN.+ELSE.+END/ or $agent =~ /.+AND.+SELECT.+/ or $agent =~ /\sAND\s.+\sAND\s/
178067
ABdec
000
011
1X1
$referrer =~ /\)/ or &List::Util::any(sub {         $_ =~ /^$referrer/; } , @crawler_lists)
179167
ABdec
0X0
100
111
defined $remote and $self->{'cache'}
181867
ABdec
0X0
100
111
defined $is_robot && $is_robot
1866100
ABdec
0X0
100
111
$remote and $agent
187533
ABdec
0X0
100
111
defined $remote and $self->{'cache'}
189967
ABdec
000
011
1X1
$browser->google || $browser->msn || $browser->baidu || $browser->altavista || $browser->yahoo || $browser->bingbot
190175
ABCdec
0000
0011
01X1
1XX1
$agent =~ m[SeznamBot/] or $agent =~ m[Google-InspectionTool/] or $agent =~ m[Googlebot/]
190767
ABdec
0X0
100
111
$is_search and $self->{'cache'}
19140
ABdec
000
011
1X1
gethostbyaddr(inet_aton($remote), 2) || $remote
19180
ABCDdec
0XX00
0XX11
10X00
10X11
11000
11011
111X1
defined $hostname and $hostname =~ /google|msnbot|bingbot|amazonbot|GPTBot/ and not $hostname =~ /^google-proxy/ or Net::CIDR::cidrlookup($remote, @cidr_blocks)
2115100
ABCdec
0XX0
1000
1011
11X1
$method and $method eq 'OPTIONS' || $method eq 'DELETE'
2116100
ABdec
0X0
100
111
$method and ($method eq "POST" and not defined $ENV{'CONTENT_LENGTH'})
100
ABdec
0X0
100
111
$method eq "POST" and not defined $ENV{'CONTENT_LENGTH'}
2122100
Adec
00
11
$self->{'status'} || 200
223533
ABdec
0X0
100
111
scalar @messages and my $logger = $self->{'logger'}
233667
ABdec
0X0
100
111
exists $self->{'auto_load'} and &boolean($self->{'auto_load'})->isFalse
233933
ABdec
000
011
1X1
ref $self eq __PACKAGE__ or UNIVERSAL::isa((&CORE::GLOBAL::caller())[0], __PACKAGE__)