Branch Coverage

blib/lib/CGI/Ex/Validate.pm
Criterion Covered Total %
branch 442 740 59.7


line true false branch
23 241 64 ref $_[0] ? :
29 273 27 UNIVERSAL::isa($_[0], __PACKAGE__) ? :
0 300 !ref($_[0]) ? :
34 0 300 unless $form and ref $form
35 2 298 if ref $form ne "HASH"
38 1 298 unless @$fields
40 4 294 if $ARGS->{'type_ne_required'}
41 4 294 if $ARGS->{'validate_if'} and not $self->check_conditional($form, $ARGS->{'validate_if'})
54 0 318 if (not ref $ref and $ref eq "OR")
55 0 0 if $found
64 9 309 if ($key =~ /^(!\s*|)m([^\s\w])(.*)\2([eigsmx]*)$/s) { }
67 0 9 if $opt =~ /e/
69 6 9 if $not and $_key =~ /(?$opt:$pat)/ or not $not || $_key =~ /(?$opt:$pat)/
78 318 0 unless ($checked{$field}++)
85 301 17 if ($ref->{'was_validated'}) { }
86 7 294 if $what_was_validated
92 124 194 if ($err) { }
95 0 124 if ($i < $fields->$#* and not ref $$fields[$i + 1] and $$fields[$i + 1] eq 'OR') { }
98 0 124 $hold_error ? :
106 0 294 if $hold_error
109 9 285 if $ARGS->{'no_extra_fields'} or $self->{'no_extra_fields'}
110 0 294 if $ARGS->{'delete_unvalidated'} or $self->{'delete_unvalidated'}
112 127 167 if (@errors)
115 0 127 if $ARGS->{'title'}
117 0 127 if $ARGS->{'raise_error'}
128 0 9 if $self->{'_recurse'} > 10
132 0 13 if (ref $form->{$key} eq 'HASH') { }
1 12 elsif (ref $form->{$key} eq 'ARRAY') { }
134 0 0 if (not defined $field_type) { }
0 0 elsif (ref $field_type ne 'HASH') { }
146 0 1 if (not defined $field_type) { }
0 1 elsif (ref $field_type eq 'HASH') { }
151 0 0 if ref $form->{$key}[$i]
155 9 4 if $keys{$key}
163 1 299 unless $val_hash
164 0 299 if (ref $val_hash ne "HASH")
165 0 0 if ref $val_hash ne "SCALAR" or not ref $val_hash
166 0 0 if ref $val_hash ne "HASH"
171 26 322 /^(?:group|general)\s+(\w+)/ ? :
176 1 298 if (my $ref = $ARGS{'fields'} || $ARGS{'order'})
177 0 1 $ARGS{'fields'} ? :
178 0 1 unless UNIVERSAL::isa($ref, "ARRAY")
180 0 1 unless defined $field
181 0 1 if (ref $field) { }
0 1 elsif ($field eq 'OR') { }
182 0 0 if ref $field ne "HASH"
183 0 0 unless defined $field->{'field'}
188 0 1 unless exists $val_hash->{$field}
189 0 1 if ref $val_hash->{$field} ne "HASH"
191 1 0 unless $val->{'field'}
197 1 0 ref $_ ? :
204 0 321 if ref $val_hash->{$field} ne "HASH"
205 0 321 if (defined $val_hash->{$field}{'field'}) { }
223 0 40 unless $ifs
224 40 0 if not ref $ifs or UNIVERSAL::isa($ifs, "HASH")
233 38 2 unless (ref $ref)
234 0 38 if ($ref eq 'OR') { }
235 0 0 if $found
239 0 38 if ($ref =~ /^function\s*\(/) { }
11 27 elsif ($ref =~ /^(.*?)\s+(was_valid|had_error|was_checked)$/) { }
2 25 elsif ($ref =~ s/^\s*!\s*//) { }
250 0 40 unless $found
254 7 0 defined $ifs_match->[$1] ? :
7 33 if $ifs_match
257 2 38 if ref $form->{$field} eq "ARRAY"
261 22 18 if $errs
272 0 385 if $self->{'_recurse'} > 10
275 0 385 if ($field_val->{'exclude_cgi'})
281 0 385 if ($field =~ /^(!\s*|)m([^\s\w])(.*)\2([eigsmx]*)$/s)
284 0 0 if $opt =~ /e/
286 0 0 if $not and $_field =~ /(?$opt:$pat)/ or not $not || $_field =~ /(?$opt:$pat)/
288 0 0 if $errs
290 0 0 @errors ? :
295 0 385 if ($field_val->{'canonical'})
301 7 378 if ($field_val->{'was_valid'} and not $self->{'was_valid'}{$field})
302 3 375 if ($field_val->{'had_error'} and not $self->{'had_error'}{$field})
303 0 375 if ($field_val->{'was_checked'} and not $self->{'was_checked'}{$field})
307 0 85 if (not exists $form->{$field} and $field_val->{'alias'})
308 0 0 ref $field_val->{'alias'} ? :
309 0 0 unless exists $form->{$alias}
316 5 2 if (defined $field_val->{'default'} and !defined($form->{$field}) || (UNIVERSAL::isa($form->{$field}, 'ARRAY') ? !@{$form->{$field};} : !length($form->{$field})))
323 41 334 if (ref $form->{$field} eq 'ARRAY') { }
12 322 elsif ($is_A and $field_val->{'coerce'}) { }
326 11 1 exists $form->{$field} ? :
335 85 329 unless defined $value
336 329 0 unless ($field_val->{'do_not_trim'})
337 0 329 if $value =~ s/( ^\s+ | \s+$ )//gx
339 0 329 if ($field_val->{'trim_control_chars'})
340 0 0 if $value =~ tr/\t/ /
341 0 0 if $value =~ tr/\000-\037//d
343 0 329 if ($field_val->{'to_upper_case'}) { }
0 329 elsif ($field_val->{'to_lower_case'}) { }
354 264 893 if /^ (compare|custom|equals|match|max_in_set|min_in_set|replace|required_if|sql|type|validate_if) _?\d* $/x
358 6 369 if ($types{'replace'})
360 0 6 UNIVERSAL::isa($field_val->{$type}, 'ARRAY') ? :
362 0 6 unless ($rx =~ /^\s*s([^\s\w])(.+)\1(.*)\1([eigsmx]*)$/s)
366 0 6 if $opt =~ /e/
373 0 3 $2 > $start->$#* || $2 == 0 ? :
0 3 if ($1) { }
381 1 5 unless defined $value
382 4 1 if ($global) { }
388 0 375 if ($field_val->{'truncate'} and my $n = $field_val->{'max_len'})
390 0 0 if not defined $value or length $value <= $n
396 5 370 if $modified and $n_values == 1
401 30 345 if ($types{'validate_if'})
405 13 17 if $ret
407 17 358 if (not $needs_val and $n_vif)
414 80 278 $field_val->{'required'} || $field_val->{'req'} ? :
415 278 80 unless ($is_required)
416 2 276 if ($types{'required_if'})
418 1 1 unless $self->check_conditional($form, $ifs, $ifs_match)
423 33 48 if ($is_required and !@$values || grep({not length $_ and !defined($field_val->{'min_len'}) || $field_val->{'min_len'} unless not defined $_;} @$values))
427 11 22 if $self->{'_check_conditional'}
431 5 320 exists $field_val->{'min_values'} ? :
432 3 322 if ($n_values < $n)
433 0 3 if $self->{'_check_conditional'}
437 30 237 $is_A ? :
267 55 unless exists $field_val->{'max_values'}
439 4 318 if ($n_values > $n)
440 0 4 if $self->{'_check_conditional'}
449 0 14 unless $field_val->{$type} =~ /^\s*(\d+)(?i:\s*of)?\s+(.+)\s*$/
453 4 34 UNIVERSAL::isa($form->{$_field}, 'ARRAY') ? :
455 23 19 if defined $_value and length $_value
458 6 8 if ($minmax eq "min" and $n > 0 or $minmax eq "max" and $n < 0)
460 1 5 if $self->{'_check_conditional'}
470 4 28 if $is_A and defined $form->{$field} and ref $form->{$field} ne "ARRAY"
471 1 138 if $nT and $nT eq "str" and ref $form->{$field} eq "ARRAY"
472 32 280 if $is_A
476 13 32 if not defined $value and $type_ne_required
478 10 309 if (exists $field_val->{'enum'})
479 5 5 ref $field_val->{'enum'} ? :
482 7 23 if defined $value and $_ eq $value
484 3 7 unless ($found)
485 0 3 if $self->{'_check_conditional'}
493 129 187 if ($nT)
494 44 85 unless ($self->check_type($value, $nT, $field, $form))
495 0 44 if $self->{'_check_conditional'}
496 41 3 $nT eq $field_val->{'type'} ? :
500 22 0 if (ref $nT eq "HASH" and $form->{$field})
503 12 8 ref $form->{$field} eq 'ARRAY' ? :
505 5 22 if $errs
508 5 17 @errors ? :
514 9 241 if ($types{'equals'})
516 0 9 $field2 =~ s/^!\s*// ? :
518 2 7 if ($field2 =~ /^([\"\'])(.*)\1$/) { }
522 2 0 defined $ifs_match->[$1] ? :
2 5 if $ifs_match
523 5 2 if (exists $form->{$field2} and defined $form->{$field2}) { }
1 1 elsif (not defined $value) { }
529 0 9 $not ? :
5 4 if ($not ? $success : !$success)
530 0 5 if $self->{'_check_conditional'}
537 4 241 if (exists $field_val->{'min_len'})
539 3 1 if (not defined $value or length $value < $n)
540 0 3 if $self->{'_check_conditional'}
545 17 228 if (exists $field_val->{'max_len'})
547 1 16 if (defined $value and length $value > $n)
548 0 1 if $self->{'_check_conditional'}
554 17 228 if ($types{'match'})
557 2 13 UNIVERSAL::isa($field_val->{$type}, 'Regexp') ? :
2 15 UNIVERSAL::isa($field_val->{$type}, 'ARRAY') ? :
559 6 15 if (UNIVERSAL::isa($rx, 'Regexp')) { }
560 2 4 unless (defined $value and $value =~ /$rx/)
564 0 15 unless ($rx =~ /^(!\s*|)m([^\s\w])(.*)\2([eigsmx]*)$/s)
569 0 15 if $opt =~ /e/
570 6 9 if ($not and (defined $value and $value =~ /(?$opt:$pat)/) or not $not || defined $value && $value =~ /(?$opt:$pat)/)
572 0 6 if $self->{'_check_conditional'}
581 30 215 if ($types{'compare'})
583 0 30 UNIVERSAL::isa($field_val->{$type}, 'ARRAY') ? :
585 0 30 unless $comp
587 15 15 if ($comp =~ /^\s*(>|<|[>
15 0 elsif ($comp =~ /^\s*(eq|ne|gt|ge|lt|le)\s+(.+?)\s*$/) { }
590 3 12 if ($1 eq '>') { }
3 9 elsif ($1 eq '<') { }
2 7 elsif ($1 eq '>=') { }
2 5 elsif ($1 eq '<=') { }
2 3 elsif ($1 eq '!=') { }
3 0 elsif ($1 eq '==') { }
598 12 3 defined $value ? :
601 3 12 if ($op eq 'gt') { }
3 9 elsif ($op eq 'lt') { }
2 7 elsif ($op eq 'ge') { }
2 5 elsif ($op eq 'le') { }
2 3 elsif ($op eq 'ne') { }
3 0 elsif ($op eq 'eq') { }
611 16 14 unless ($test)
612 0 16 if $self->{'_check_conditional'}
620 0 245 if ($types{'sql'})
622 0 0 $db_type ? :
623 0 0 if (not $dbh) { }
0 0 elsif (UNIVERSAL::isa($dbh, 'CODE')) { }
624 0 0 $db_type ? :
631 0 0 unless defined $$field_val{"${type}_error_if"}
632 0 0 if (not $return and $$field_val{"${type}_error_if"} or $return and not $$field_val{"${type}_error_if"})
634 0 0 if $self->{'_check_conditional'}
641 7 238 if ($types{'custom'})
644 3 4 if (UNIVERSAL::isa($check, 'CODE')) { }
646 1 2 unless eval { do { $ok = &$check($field, $value, $field_val, $type, $form); 1 } }
647 1 2 if $ok
648 1 1 if not ref $@ and defined $err
650 2 2 if $check
652 0 4 if $self->{'_check_conditional'}
653 1 3 defined $err ? :
660 2 288 if ($field_val->{'untaint'} and $#errors == -1)
661 1 1 if (not $content_checked) { }
665 1 0 /(.*)/ ? :
666 1 0 if ($n_values == 1)
673 90 200 @errors ? :
681 27 102 ref $type eq 'HASH' ? :
0 129 ref $type eq 'Type::Tiny' ? :
684 1 128 if not defined $value and $type ne "code"
685 0 128 if ($type eq 'email') { }
26 102 elsif ($type eq 'hash') { }
0 102 elsif ($type eq 'local_part') { }
3 99 elsif ($type eq 'ip') { }
8 91 elsif ($type eq 'domain') { }
0 91 elsif ($type eq 'url') { }
0 91 elsif ($type eq 'uri') { }
3 88 elsif ($type eq 'code') { }
15 73 elsif ($type eq 'str') { }
25 48 elsif ($type eq 'int') { }
20 28 elsif ($type eq 'uint') { }
19 9 elsif ($type eq 'num') { }
9 0 elsif ($type eq 'unum') { }
0 0 elsif ($type eq 'cc') { }
686 0 0 unless $value
687 0 0 $value =~ /^(.+)\@(.+?)$/ ? :
688 0 0 if length $local_p > 60
689 0 0 if length $dom > 100
690 0 0 unless $self->check_type($dom, "domain") or $self->check_type($dom, "ip")
691 0 0 unless $self->check_type($local_p, "local_part")
693 4 22 if ref $value ne "HASH"
696 0 0 unless defined $value and length $value
698 0 0 if $value =~ /[^\w.~!\#\$%\^&*\-=+?]/
702 0 3 unless $value
703 11 0 if not /\D/
707 0 8 if not $value or length $value > 255
708 4 4 if not $value =~ /^([a-z0-9][a-z0-9\-]{0,62} \.)+ [a-z]{1,63}$/xi or $value =~ /(\.\-|\-\.|\.\.)/
713 0 0 unless $value
714 0 0 unless $value =~ s[^https?://([^/]+)][]i
716 0 0 unless $self->check_type($dom, "domain") or $self->check_type($dom, "ip")
717 0 0 if $value and not $self->check_type($value, "uri")
721 0 0 unless $value
722 0 0 if $value =~ /\s+/
725 1 2 if defined $value and ref $value ne "CODE"
727 2 13 if ref $value or not defined $value
729 10 15 unless $value =~ /^-? (?: 0 | [1-9]\d*) $/x
730 4 11 $value < 0 ? :
2 13 if $value < 0 ? $value < "-2147483648" : $value > 2147483647
732 11 9 unless $value =~ /^ (?: 0 | [1-9]\d*) $/x
733 1 8 if $value > 4294967295
735 7 12 unless $value =~ /^-? (?: 0 | [1-9]\d* (?:\.\d+)? | 0?\.\d+) $/x
737 0 9 unless $value =~ /^ (?: 0 | [1-9]\d* (?:\.\d+)? | 0?\.\d+) $/x
740 0 0 unless $value
741 0 0 if $value =~ /[^\d\-\ ]/
743 0 0 if length $value > 16 or length $value < 13
749 0 0 if ++$switch > 2
751 0 0 if $y > 9
754 0 0 if $sum % 10
773 0 0 if ($form)
774 0 0 unless ref $form
775 0 0 if ref $form ne "HASH"
779 0 0 unless @$fields
780 0 0 if $form and $ARGS->{'validate_if'} and not $self->check_conditional($form, $ARGS->{'validate_if'})
788 0 2 if $ENV{'HTTP_USER_AGENT'} and grep {$ENV{'HTTP_USER_AGENT'} =~ /$_/;} @UNSUPPORTED_BROWSERS
792 0 2 if (ref $val_hash ne "HASH")
793 0 0 if ref $val_hash ne "SCALAR" or not ref $val_hash
794 0 0 if ref $val_hash ne "HASH"
798 0 2 unless $_[0]
799 0 2 if (ref $_[0] eq 'HASH') { }
825 0 0 if ref $form_name eq "HASH"
828 0 0 unless $ARGS->{'form_args'}
0 0 unless $args
830 0 0 $args->{'no_inline_error'} || !$args->{'columns'} || $args->{'columns'} != 3 ? :
838 0 0 if $args->{'title'}
845 0 0 $args->{'no_inline_error'} ? :
0 0 $cols == 2 ? :
858 0 0 unless defined $args->{'css'}
860 0 0 $args->{'css'} ? :
865 0 0 $field->{'field'} =~ /^pass(?:|wd|word|\d+|_\w+)$/i ? :
0 0 $field->{'htype'} ? :
866 0 0 if ($type eq 'hidden') { }
0 0 elsif ($type eq 'textarea' or $field->{'rows'} or $field->{'cols'}) { }
0 0 elsif ($type eq 'radio' or $type eq 'checkbox') { }
0 0 elsif ($type eq 'select' or $field->{'enum'} or $field->{'label'}) { }
870 0 0 $field->{'rows'} ? :
871 0 0 $field->{'cols'} ? :
872 0 0 $field->{'wrap'} ? :
877 0 0 @$e > @$l ? :
881 0 0 defined $l->[$i] ? :
888 0 0 @$e > @$l ? :
890 0 0 defined $e->[$i] ? :
0 0 defined $l->[$i] ? :
895 0 0 $field->{'size'} ? :
896 0 0 $m ? :
908 0 0 $n % 2 ? :
912 0 0 if ($js)
930 0 127 if ref $errors ne "ARRAY"
931 0 127 if ref $extra ne "HASH"
943 106 33 defined $extra->{'as_string_join'} ? :
0 139 defined $extra2->{'as_string_join'} ? :
945 0 139 defined $extra->{'as_string_header'} ? :
0 139 defined $extra2->{'as_string_header'} ? :
947 0 139 defined $extra->{'as_string_footer'} ? :
0 139 defined $extra2->{'as_string_footer'} ? :
960 106 33 defined $extra->{'as_array_title'} ? :
0 139 defined $extra2->{'as_array_title'} ? :
964 33 106 if ($title) { }
968 107 0 if ref $_
976 33 106 $has_headings ? :
0 139 defined $extra->{'as_array_prefix'} ? :
0 139 defined $extra2->{'as_array_prefix'} ? :
980 33 106 if length $title
985 0 140 if (not ref $err) { }
990 0 140 if $found{$text}
1006 0 2 defined $extra->{'as_hash_suffix'} ? :
20 2 defined $extra2->{'as_hash_suffix'} ? :
1008 0 18 defined $extra->{'as_hash_join'} ? :
4 18 defined $extra2->{'as_hash_join'} ? :
1013 0 22 unless ref $err
1016 0 22 unless $field
1017 0 22 if ($field_val->{'delegate_error'})
1019 0 0 defined $ifs_match->[$1] ? :
0 0 if $ifs_match
1023 0 22 if $found{$field}{$text}
1030 22 0 if ($join)
1032 0 22 defined $extra->{'as_hash_header'} ? :
0 22 defined $extra2->{'as_hash_header'} ? :
1034 0 22 defined $extra->{'as_hash_footer'} ? :
0 22 defined $extra2->{'as_hash_footer'} ? :
1049 2 160 if defined $custom_err and length $custom_err
1050 0 160 $type =~ s/(_?\d+)$// ? :
1054 0 160 if ($field_val->{'delegate_error'})
1056 0 0 defined $ifs_match->[$1] ? :
0 0 if $ifs_match
1061 18 142 if not $name and $field =~ /\W/ || $field =~ /\d/ && $field =~ /\D/
1062 142 18 unless ($name)
1067 0 0 defined $ifs_match->[$1] ? :
14 146 if $ifs_match
1074 0 160 length $dig ? :
1076 0 0 defined $ifs_match->[$1] ? :
0 12 if $ifs_match
1079 12 0 if (my $value = $$field_val{"$type$dig"})
1080 12 0 unless ref $value
1086 148 12 unless ($return)
1087 27 121 if ($type eq 'required' or $type eq 'required_if') { }
3 118 elsif ($type eq 'min_values') { }
6 112 elsif ($type eq 'max_values') { }
4 108 elsif ($type eq 'enum') { }
5 103 elsif ($type eq 'equals') { }
3 100 elsif ($type eq 'min_len') { }
1 99 elsif ($type eq 'max_len') { }
2 97 elsif ($type eq 'max_in_set') { }
3 94 elsif ($type eq 'min_in_set') { }
10 84 elsif ($type eq 'match') { }
16 68 elsif ($type eq 'compare') { }
0 68 elsif ($type eq 'sql') { }
3 65 elsif ($type eq 'custom') { }
60 5 elsif ($type eq 'type') { }
1 4 elsif ($type eq 'untaint') { }
4 0 elsif ($type eq 'no_extra_fields') { }
1092 0 3 $n == 1 ? :
1097 1 5 $n == 1 ? :
1106 1 0 defined $ifs_match->[$1] ? :
1 4 if $ifs_match
1111 0 3 $n == 1 ? :
1116 0 1 $n == 1 ? :
1141 10 50 if ref $_type eq "HASH"
1142 6 54 if ref $_type eq "ARRAY"
1153 0 160 unless $return