Branch Coverage

blib/lib/Mail/DMARC/Iterator.pm
Criterion Covered Total %
branch 140 354 39.5


line true false branch
41 2 0 if @_ == 1
44 0 0 if ($_[$i] eq 'DebugFunc' or $_[$i] eq 'Debug')
50 0 0 if @_ > 1
83 0 7 if ($args{'spf_result'}) { }
4 3 elsif ($args{'ip'} and $args{'mailfrom'} and $args{'helo'}) { }
0 3 elsif (exists $args{'spf_result'}) { }
96 0 7 if ($args{'dkim_result'}) { }
2 5 elsif ($args{'dkim_sub'}) { }
127 0 60 if $self->{'result'}
128 34 26 unless @input
135 12 14 unless (ref $data)
136 0 12 if $Mail::DMARC::Iterator::DEBUG
137 8 4 if (not $self->{'domain'} and defined $self->{'_hdrbuf'})
141 10 2 if ($self->{'dkim'})
152 0 14 if (not UNIVERSAL::isa($data, 'Net::DNS::Packet')) { }
155 0 0 if $Mail::DMARC::Iterator::DEBUG
158 0 14 if $Mail::DMARC::Iterator::DEBUG
165 0 14 unless ($cb)
168 0 0 unless defined $cb
174 0 14 if $self->{'dnscache'}
182 0 35 if $self->{'result'}
183 8 27 unless $self->{'domain'}
189 7 20 unless my $rec = $self->{'record'}
192 2 18 if ($self->{'dkim_sub'} and my $r = $self->{'dkim_result'}[0] = $self->{'dkim_sub'}->())
194 2 0 if $self->{'domrx'}
196 20 0 if ($self->{'dkim_result'})
197 4 16 if ($self->{'dkim'} and not $self->{'dkim_result'}[1])
199 0 4 unless $self->{'dkim_result'}[0]
200 0 4 if $Mail::DMARC::Iterator::DEBUG
203 1 19 unless $self->{'dkim_result'}[0]
204 0 19 if $Mail::DMARC::Iterator::DEBUG
207 6 0 if ($st == 1) { }
0 0 elsif ($st == -2 or $st == -1) { }
0 0 elsif ($st == 0) { }
225 0 14 unless my $sr = $self->{'spf_result'}
226 9 5 unless defined $sr->[0]
232 0 5 $rec->{'aspf'} eq 's' ? :
1 4 if ($rec->{'aspf'} eq 's' ? lc $from ne $rec->{'domain'} : !($from =~ /^([\w\-\.]+\.)?\Q$rec->{'domain'}\E/i))
236 0 1 if $Mail::DMARC::Iterator::DEBUG
244 0 4 if $Mail::DMARC::Iterator::DEBUG
246 1 3 if ($sr->[0] eq 'Pass')
253 0 0 $sr->[0] eq 'TempError' ? :
0 0 $sr->[0] eq 'PermError' ? :
0 0 $sr->[0] eq 'SoftFail' ? :
3 0 $sr->[0] eq 'Fail' ? :
260 1 0 if ($dkim_result || !$self->{'dkim'} and $spf_result || !$self->{'spf'})
267 0 0 $dkim_result ? :
0 0 $spf_result ? :
0 1 if $Mail::DMARC::Iterator::DEBUG
271 2 0 unless defined $_->[0]
272 0 0 if (not $best) { }
0 0 elsif ($_->[0] and $_->[0] > $best->[0]) { }
278 1 0 if ($self->{'dkim_sub'} and !$best || $best->[0] != 1 and !$self->{'dkim_result'}[0] || grep({not $_->status;} @{$$self{'dkim_result'}[0];}))
283 0 1 if $Mail::DMARC::Iterator::DEBUG
296 8 19 if (not $self->{'domain'}) { }
7 12 elsif (my $dom = $self->{'_dmarc_domain'}) { }
298 0 8 if $Mail::DMARC::Iterator::DEBUG
302 0 7 if $Mail::DMARC::Iterator::DEBUG
312 15 12 unless $self->{'record'}
314 12 0 if ($self->{'dkim'})
318 0 12 if (not $self->{'dkim_result'}[1]) { }
320 0 0 if $Mail::DMARC::Iterator::DEBUG
328 12 8 if (ref $todo) { }
329 0 12 if $Mail::DMARC::Iterator::DEBUG
332 0 8 if $Mail::DMARC::Iterator::DEBUG
344 6 6 if ($self->{'spf'}) { }
0 6 elsif (not $self->{'spf_result'}) { }
348 1 5 if ($self->{'spf_result'}[0]) { }
351 0 1 if $Mail::DMARC::Iterator::DEBUG
361 0 5 if $Mail::DMARC::Iterator::DEBUG
368 0 0 if $Mail::DMARC::Iterator::DEBUG
375 19 7 if $need_data
382 0 19 if ($self->{'dnscache'} and my $cached = $self->{'dnscache'}{$q->qtype . ':' . $q->qname}) { }
385 0 0 if $Mail::DMARC::Iterator::DEBUG
391 0 19 if $Mail::DMARC::Iterator::DEBUG
395 0 26 if @input
397 0 26 if ($Mail::DMARC::Iterator::DEBUG)
399 0 0 if (not ref $_) { }
411 0 7 unless $self->{'result'}
412 7 0 unless (defined $self->{'result'}[2])
413 0 7 if ($self->{'result'}[0] == 0) { }
414 0 0 if ($rec->{'sp'} and $rec->{'domain'} ne $self->{'domain'}[0]) { }
423 0 7 if ($Mail::DMARC::Iterator::DEBUG)
429 0 0 unless $self->{'result'}
447 0 7 if $error
456 0 7 unless $_->type eq 'TXT'
459 0 7 unless $txt =~ /^\s*v=DMARC1[\s;]/
460 0 7 if $Mail::DMARC::Iterator::DEBUG
461 0 7 unless my $v = parse_taglist($txt, \$error)
462 0 7 unless $v = _check_dmarc_record($v)
466 0 7 unless @record
472 0 7 if ($record[0]{'pct'} < 100 and rand 100 < $record[0]{'pct'})
474 0 0 if $Mail::DMARC::Iterator::DEBUG
483 0 7 if (@{$self->{'domain'};} > 1 and $dom ne $self->{'domain'}[0])
488 0 7 if $Mail::DMARC::Iterator::DEBUG
492 7 0 if ($record[0]{'adkim'} eq 'r') { }
500 5 2 if ($self->{'dkim'}) { }
2 0 elsif ($self->{'dkim_result'}) { }
511 0 7 if ($self->{'spf_result'} and ref $self->{'spf_result'}[0] eq 'ARRAY')
514 0 0 $record[0]{'aspf'} eq 'r' ? :
0 0 $record[0]{'aspf'} eq $record[0]{'adkim'} ? :
519 0 0 unless my $from = $_->[1]{'envelope-from'}
522 0 0 unless $from =~ /$domrx/
525 0 0 if (@aligned > 1) { }
0 0 elsif (@aligned) { }
528 0 0 unless my(@a) = grep({$_->[0] eq $_;} @aligned)
532 0 0 if $Mail::DMARC::Iterator::DEBUG
535 0 0 if $Mail::DMARC::Iterator::DEBUG
537 0 0 if $Mail::DMARC::Iterator::DEBUG
539 0 0 !@aligned ? :
547 0 0 @$dom > 1 ? :
0 0 if $Mail::DMARC::Iterator::DEBUG
554 0 0 if (@$dom) { }
562 0 0 if $Mail::DMARC::Iterator::DEBUG
564 0 0 $error ? :
589 21 56 if (defined $v->{$k}) { }
42 14 elsif (defined $default) { }
590 0 21 unless ($v->{$k} =~ /$rx/)
591 0 0 if $Mail::DMARC::Iterator::DEBUG
596 0 42 if (ref $default)
597 0 0 if $Mail::DMARC::Iterator::DEBUG
608 0 4 if ($error) { }
609 0 0 if $Mail::DMARC::Iterator::DEBUG
612 4 0 $_->type eq 'TXT' ? :
613 0 4 if $Mail::DMARC::Iterator::DEBUG
620 0 3 if ($error) { }
626 3 0 if (not defined $rv[0] or $rv[0] ne '') { }
644 0 8 if $data eq ''
659 7 24 if ($2)
661 0 7 if $Mail::DMARC::Iterator::DEBUG
668 0 8 if @hdr and defined $self->{'_hdrbuf'}
676 31 0 $self->{'spf'} || $self->{'spf_result'} ? :
24 7 unless $self->{'spf'} || $self->{'spf_result'} ? s/^(From)\s*:\s*//i : s/^(?:(From)\s*|Received-SPF):\s*//i
679 7 0 if ($1) { }
681 0 7 if $Mail::DMARC::Iterator::DEBUG
685 0 0 if $Mail::DMARC::Iterator::DEBUG
691 1 7 if (defined $self->{'_hdrbuf'})
692 1 0 if $data ne ''
698 7 0 unless ($self->{'domain'})
700 0 7 if (not $from) { }
0 7 elsif (@$from != 1) { }
701 0 0 if $Mail::DMARC::Iterator::DEBUG
705 0 0 if $Mail::DMARC::Iterator::DEBUG
711 7 0 if (my $dom = organizational_domain($from->[0]))
712 0 7 if $dom ne $from->[0]
716 0 7 if $Mail::DMARC::Iterator::DEBUG
720 0 7 if (not $self->{'spf_result'} || $self->{'spf'})
722 0 0 unless delete $self->{'_spfr'}
723 0 0 unless my($result, $hash) = _parse_spfreceived($_)
724 0 0 unless (my $from = $hash->{'envelope-from'})
725 0 0 if $Mail::DMARC::Iterator::DEBUG
730 0 0 unless @dom == 1
732 0 0 if $Mail::DMARC::Iterator::DEBUG
735 0 0 @records ? :
747 14 0 if (not @state) { }
0 0 elsif ($state[-1] eq '<') { }
0 0 elsif ($state[-1] eq '"') { }
0 0 elsif ($state[-1] eq '(') { }
748 0 14 unless /\G ([^<,\"\(]*) (?: ([<\(\"]) | (,) | \z) /cgx
749 0 14 if ($2) { }
7 7 elsif ($1 ne '') { }
7 0 elsif (not $3) { }
752 7 0 if (my $x = $1) =~ /^\s*$addr\s*\z/
758 0 0 unless /\G(?: $addr | (?:[^>]*) ) > /cgx
760 0 0 if $1
763 0 0 unless /\G (?:[^"\\]+|\\.)* \"/cgx
767 0 0 unless /\G .*? ([()]) /cgsx
768 0 0 if ($1 eq ')') { }
775 0 7 if $Mail::DMARC::Iterator::DEBUG
796 0 0 unless /\G($res)\s+/cig
801 0 0 if ($comment) { }
0 0 elsif (/\G($key)$fws?=$fws?($val)\s*(;\s*)?/cg) { }
0 0 elsif (not %hash || defined $comment and /\G\(/cg) { }
802 0 0 unless /\G[^()]*([()])\s*/cg
803 0 0 $1 eq '(' ? :
806 0 0 if $v =~ s/\A\"(.*)\"\z/$1/
808 0 0 unless $delim