Branch Coverage

blib/lib/Mail/DKIM/Iterator.pm
Criterion Covered Total %
branch 174 260 66.9


line true false branch
68 22 22 if (my $sig = delete $args{'sign'})
71 22 0 if ref $sig ne 'ARRAY'
75 22 0 if ref $_
77 0 22 unless $s
91 19 85 if (ref $arg) { }
99 44 41 if (defined $self->{'_hdrbuf'}) { }
102 0 44 unless $self->{'_hdrbuf'} =~ /(\r?\n)\1/g
108 22 22 if ($self->{'extract_sig'} and my(@sig) = _parse_header($self->{'header'}))
110 0 22 if (my $f = $self->{'filter'})
113 22 0 if @sig
116 44 0 if $arg ne ''
123 0 85 if (not $self->{'sig'}) { }
131 104 0 unless @_
134 0 104 unless $rv
141 44 60 if $_->status
145 41 19 unless $sig->{'bh:computed'}
149 38 22 if ($sig->{'b'})
151 38 0 unless $self->{'records'}{$name}
156 41 63 $need_more_data ? :
163 0 0 if $self->{'header'} and $self->{'sig'}
174 0 0 $ar ? :
175 0 0 unless (shift())->result
182 0 208 if defined $self->{'_hdrbuf'}
183 0 208 unless $self->{'sig'}
189 44 164 if ($sig->{':result'})
194 1 163 if ($sig->{'error'})
206 66 97 unless ($sig->{'b'})
208 44 22 if (not $sig->{'bh:computed'}) { }
215 22 0 $dkim_sig ? :
226 1 96 if ($sig->{'x'} and $sig->{'x'} < time)
233 18 0 if ($txt and !ref($txt) || ref $txt eq 'ARRAY')
237 0 18 ref $txt ? :
238 17 1 if (my $r = parse_dkimkey($_, \$error))
244 1 17 if $error
250 1 76 if not @v and exists $self->{'records'}{$dns}
252 20 76 if @v
261 22 44 unless ref $v
263 44 22 if ($for_signing)
268 1 65 if (($v->{'v'} // '') ne '1') { }
0 65 elsif (not $v->{'d'}) { }
0 65 elsif (not $v->{'s'}) { }
0 65 elsif (not $v->{'h'}) { }
0 65 elsif ($v->{'l'} and not $v->{'l'} =~ /^\d{1,76}\z/) { }
0 65 elsif (do { $v->{'q'} = lc($v->{'q'} // 'dns/txt'); $v->{'q'} ne 'dns/txt' }) { }
284 1 65 if $$error
292 0 65 unless grep {$_ eq 'from';} @h
295 44 21 if ($for_signing) { }
298 0 44 if exists $v->{'t'}
299 0 44 if (defined $v->{'x'} and not $v->{'x'} =~ /^\+?\d{1,12}\z/)
303 0 21 if (not $v->{'b'} && ($v->{'b:bin'} = _decode64($v->{'b'}))) { }
0 21 elsif (not $v->{'bh'} && ($v->{'bh:bin'} = _decode64($v->{'bh'}))) { }
0 21 elsif ($v->{'t'} and not $v->{'t'} =~ /^\d{1,12}\z/) { }
1 20 elsif ($v->{'x'}) { }
310 0 1 if (not $v->{'x'} =~ /^\d{1,12}\z/) { }
0 2 elsif ($v->{'t'} and $v->{'x'} < $v->{'t'}) { }
317 0 21 if ($v->{'i'}) { }
319 0 0 if (lc($v->{'i'}) =~ /\@([^\@]+)$/) { }
322 0 0 unless $v->{'i:domain'} =~ /^(.+\.)?\Q$v->{'d'}\E\z/
332 0 65 unless (my($hdrc, $bodyc) = $v->{'c'} =~ m[^(relaxed|simple)(?:/(relaxed|simple))?$])
336 0 65 unless (my($kalgo, $halgo) = $v->{'a'} =~ /^(rsa)-(sha(?:1|256))$/)
339 0 65 if $$error
354 18 0 unless ref $v
355 1 17 unless ($v and %$v)
360 0 17 if (($v->{'v'} ||= 'DKIM1') ne 'DKIM1') { }
0 17 elsif (($v->{'k'} //= 'rsa') ne 'rsa') { }
365 0 17 if (exists $v->{'g'})
378 0 0 unless ($v->{'s'}{'*'} or $v->{'s'}{'email'})
395 20 2 if (ref $sig and $sig->{'h_auto'})
406 20 120 if exists $oh{$k} and --$oh{$k} == 0
411 0 22 unless $sig = parse_signature($sig, $error, 1)
415 0 22 if not $sig{'t'} and exists $sig{'t'}
417 0 22 if $sig{'x'} and $sig{'x'} =~ /^\+(\d+)$/
418 0 22 unless ($sig{'a:key'} eq 'rsa')
423 0 22 if $sig{':i'}
424 0 22 if $sig{':z'}
434 154 22 if /:/
443 114 86 @lines == 1 ? :
444 159 41 if (length $append <= $x80) { }
21 20 elsif (length $append <= 80) { }
450 40 4 if ($x80 > 10)
452 20 20 if $append eq ''
461 0 22 unless ($sig->{'a:key'} eq 'rsa')
468 0 22 ref $key ? :
469 0 22 unless ($priv)
480 66 11 if $x80 > 10
481 55 22 if $data ne ''
495 1 95 if (defined $sig->{'bh:computed'} and $sig->{'bh:computed'} ne $sig->{'bh:bin'})
499 77 18 unless $param
501 0 18 unless %$param
502 0 18 if $param->{'tempfail'}
503 1 17 if $param->{'permfail'}
505 0 17 $param->{'t'}{'y'} ? :
506 0 17 unless $param->{'p'}
509 0 17 unless $param->{'h'}{$sig->{'a:hash'}}
512 0 0 if $param->{'t'}{'s'} and $sig->{'i:domain'} and $sig->{'i:domain'} ne $sig->{'d'}
515 0 17 if $param->{'g'} and not $sig->{'i'} =~ /$param->{'g'}/
518 0 17 unless defined $sig->{'bh:computed'}
520 3 14 unless (eval { do { die [-3, 'using public key failed'] unless my $rsa = 'Crypt::OpenSSL::RSA'->new_public_key(do { local $_ = $param->{'p'}; s/\s+//g; s/(.{1,64})/$1\n/g; "-----BEGIN PUBLIC KEY-----\n$_-----END PUBLIC KEY-----\n" }); $rsa->use_no_padding; die [-3, 'header sig corrupt'] unless my $bencrypt = eval { do { $rsa->encrypt($sig->{'b:bin'}) } }; my $expect = _emsa_pkcs1_v15($sig->{'a:hash'}, $sig->{'h:hash'}, $rsa->size); if ($expect ne $bencrypt) { die [$FAIL, 'header sig mismatch']; } ; 1 } })
521 0 16 unless my $rsa = 'Crypt::OpenSSL::RSA'->new_public_key(do { local $_ = $param->{'p'}; s/\s+//g; s/(.{1,64})/$1\n/g; "-----BEGIN PUBLIC KEY-----\n$_-----END PUBLIC KEY-----\n" })
528 1 15 unless my $bencrypt = eval { do { $rsa->encrypt($sig->{'b:bin'}) } }
532 1 14 if ($expect ne $bencrypt)
539 2 1 if ref $@
542 12 2 unless $sig->{':warning'}
556 21 1 if ($sig) { }
562 2 19 if (my(@h) = grep({$critical{$_} < 0;} keys %critical))
585 0 37 if $pad < 8
630 0 445 if ($k eq 'dkim-signature') { }
632 0 0 if $_ eq $dkh
723 0 85 if $sig->{'bh:computed'}
725 43 1 if (not $sig->{'error'} and my $digest = $digest{$sig->{'a:hash'}}() and my $transform = $bodyc{$sig->{'c:body'}}()) { }
733 1 41 defined $sig->{'l'} ? :
1 42 $sig->{'l'} ? :
741 1 84 if $bh->{'done'}
742 41 43 if ($buf eq '')
747 0 43 if $tbuf eq ''
749 41 2 unless defined $bh->{'l'}
750 1 1 if (ref $bh->{'l'})
754 1 0 if ($bh->{'l'} > 0) { }
755 0 1 if ($bh->{'l'} -= length $tbuf) > 0
765 43 0 if $tbuf ne ''
766 42 1 unless $bh->{'done'}
772 1 41 if $bh->{'_data_after_l'}
801 0 295 if (defined $3)
805 40 255 unless defined $1
806 0 255 if (exists $v{$1})
823 44 0 if $pad
860 0 8 $_[0][2] > 0 ? :
861 16 0 $_[0][2] > 0 ? :
865 0 0 unless $self->[2]
867 0 0 if defined $self->[3] and $self->[3] ne ''