Branch Coverage

blib/lib/Mail/SpamAssassin/BayesStore/DBM.pm
Criterion Covered Total %
branch 124 390 31.7


line true false branch
33 0 21 unless (eval { do { require Digest::SHA; 'Digest::SHA'->import('sha1'); 1 } })
100 79 57 if (exists $self->{'has_dbm_module'})
139 134 14 unless ($self->HAS_DBM_MODULE)
146 2 12 if $self->{'already_tied'} and $self->{'is_locked'} == 0
149 0 12 unless (defined $main->{'conf'}{'bayes_path'})
160 4 16 if (-f $path . '_toks' . $ext)
166 8 4 unless ($found)
180 1 7 unless (tie %{$$self{$db_var};}, $self->DBM_MODULE, $name, 0, oct $main->{'conf'}{'bayes_file_mode'} & 438)
188 1 0 if ($dbname eq 'seen') { }
192 0 1 unless tie %{$$self{$db_var};}, $self->DBM_MODULE, $name, 66, oct $main->{'conf'}{'bayes_file_mode'} & 438
205 0 4 if ($self->_check_db_version != 0)
218 0 0 unless exists $self->{$db_var}
232 2 28 unless ($self->HAS_DBM_MODULE)
242 2 26 if ($self->{'already_tied'} and $self->{'is_locked'} == 1)
247 0 26 unless (defined $main->{'conf'}{'bayes_path'})
258 22 8 if (-f $path . '_toks' . $ext)
265 0 26 unless (-d $parentdir)
273 0 26 if ($main->{'learn_wait_for_lock'}) { }
278 26 0 if ($main->{'locker'}->safe_lock($path, $tout, $main->{'conf'}{'bayes_file_mode'})) { }
293 0 52 if $self->DBM_MODULE eq 'DB_File'
299 0 52 unless tie %{$$self{$db_var};}, $self->DBM_MODULE, $name, 66, oct $main->{'conf'}{'bayes_file_mode'} & 438
307 22 4 if $found
313 0 26 if ($found and not $self->_upgrade_db) { }
4 22 elsif (not $found) { }
332 0 0 unless exists $self->{$db_var}
337 0 0 if ($self->{'is_locked'})
362 22 0 if $verschk == 0
365 0 0 if ($verschk == 1)
384 0 0 if (-f $jpath)
386 0 0 unless unlink $jpath
389 0 0 if ($self->{'db_version'} < 2)
397 0 0 if ($self->{'db_version'} == 0) { }
429 0 0 unless $res
448 0 0 if $tok =~ /^(?:\*\*[A-Z]+$|\015\001\007\011\003)/
454 0 0 if ($count++ % 1000 == 0)
468 0 0 unless am_running_on_windows()
472 0 0 if (-f $msgc)
474 0 0 unless (unlink $msgc)
483 0 0 unless -f $newf
484 0 0 unless (rename $newf, $oldf)
497 0 0 unless $res
506 0 0 if ($self->{'db_version'} == 2)
530 0 0 unless $res
548 0 0 if $tok =~ /^\015\001\007\011\003/
553 0 0 if ($count++ % 1000 == 0)
566 0 0 unless am_running_on_windows()
572 0 0 unless -f $newf
573 0 0 unless (rename $newf, $oldf)
586 0 0 unless $res
609 39 30 unless $self->{'already_tied'}
616 56 4 if (exists $self->{$db_var})
623 26 4 if ($self->{'is_locked'})
643 0 0 if $tok =~ /^\015\001\007\011\003/
651 0 0 if ($token_age >= $start * $i) { }
697 0 0 if ($showdots)
709 0 0 if $tok =~ /^\015\001\007\011\003/
713 0 0 if ($atime < $too_old) { }
718 0 0 if ($atime > $vars[10])
723 0 0 if (not defined $oldest or $atime < $oldest)
724 0 0 if ($ts + $th == 1) { }
0 0 elsif ($ts < 8 and $th < 8) { }
731 0 0 if (($kept + $deleted) % 1000 == 0)
732 0 0 if ($showdots)
754 0 0 if ($kept < 100000) { }
782 0 0 unless am_running_on_windows()
788 0 0 unless -f $newf
789 0 0 unless (rename $newf, $oldf)
809 0 10 if $self->{'db_version'} < $self->DB_VERSION
812 0 10 if $conf->{'bayes_journal_max_size'} == 0
821 6 4 unless stat $self->_get_journal_filename and -f _
824 0 4 if -s _ > $conf->{'bayes_journal_max_size'}
828 0 4 if $vars[7] > 0 and time - $vars[7] > 86400
845 2 4 if ($self->{'bayes'}{'main'}{'learn_to_journal'}) { }
860 0 4 if ($self->{'bayes'}{'main'}{'learn_to_journal'}) { }
910 4 60 if (not $db_ver or $db_ver =~ /\D/)
912 60 4 if ($db_ver >= 2) { }
4 0 elsif ($db_ver == 0) { }
0 0 elsif ($db_ver == 1) { }
984 414 290 if (not $_ or $_ =~ /\D/)
996 0 0 if $tok =~ /^\015\001\007\011\003/
997 0 0 if defined $regex and not $tok =~ /$regex/o
1021 10 0 if (not $running or $running =~ /\D/)
1046 0 0 unless defined $atime
1048 0 0 if ($self->{'bayes'}{'main'}{'learn_to_journal'}) { }
1061 4 6 unless defined $atime
1064 554 2216 if ($self->{'bayes'}{'main'}{'learn_to_journal'}) { }
1084 2 8 if ($self->{'bayes'}{'main'}{'learn_to_journal'}) { }
1121 8 6 if $nbytes == 0
1132 0 6 unless (open OUT, '>>' . $path)
1144 0 6 unless $original_point >= 0
1150 0 6 if (not defined $len or $len < 0)
1152 0 0 unless (defined $len)
1161 0 6 if ($len != $nbytes)
1167 0 0 if (not truncate(OUT, $original_point) or $write_failure++ > 4)
1177 0 6 unless (close OUT)
1188 538 0 if (not defined $self->{'db_version'} or $self->{'db_version'} >= 1)
1215 0 2 if (not stat $path && -f _ or -z _)
1222 2 0 if ($self->tie_db_writable)
1226 0 2 unless (eval { do { local $SIG{'__DIE__'}; if ($self->tie_db_writable) { $ret = $self->_sync_journal_trapped($opts, $path); } ; 1 } })
1227 0 0 $@ ne '' ? :
1231 2 0 unless ($self->{'bayes'}{'main'}{'learn_caller_will_untie'})
1236 0 2 if (defined $eval_stat)
1260 0 2 if (not stat $path && -f _ or -z _)
1264 0 2 unless (-r $path)
1274 2 0 unless am_running_on_windows()
1278 0 2 unless (rename $path, $retirepath)
1285 0 2 unless (open JOURNAL, "<$retirepath")
1295 0 558 if (/^t (\d+) (.+)$/) { }
554 4 elsif (/^c (-?\d+) (-?\d+) (\d+) (.+)$/) { }
2 2 elsif (/^n (-?\d+) (-?\d+)$/) { }
2 0 elsif (/^m ([hsf]) (.+)$/) { }
1297 0 0 if not exists $tokens{$tok} or $1 + 0 > $tokens{$tok}
1306 0 2 if ($1 eq 'f') { }
1317 0 0 $! == 9 ? :
0 2 unless defined $_ or $! == 0
1320 0 2 unless close JOURNAL
1328 0 0 if (++$count % 1000 == 0)
1329 0 0 if ($showdots)
1334 0 2 if ($showdots)
1337 0 2 unless unlink $retirepath
1346 0 2 if ($opts->{'verbose'}) { }
1364 0 0 if $oldatime >= $atime
1372 0 2770 if ($ts < 0)
1373 0 2770 if ($th < 0)
1376 1108 1662 if $oldatime > $atime
1387 0 2770 if $tok =~ /^\015\001\007\011\003/
1394 1108 1662 if ($ts == 0 and $th == 0) { }
1395 0 1108 unless $exists_already
1399 1662 0 unless ($exists_already)
1406 4 1658 if (not defined $newmagic or $atime > $newmagic)
1413 4 1658 if (not defined $oldmagic or $oldmagic eq '' or $atime < $oldmagic)
1422 6 4 if ($ds)
0 10 if ($ns < 0)
1423 4 6 if ($dh)
0 10 if ($nh < 0)
1459 0 0 unless opendir DIR, $dir
1461 0 0 unless closedir DIR
1462 0 0 if (@files < 2 or not grep(/bayes_seen/, @files) or not grep(/bayes_toks/, @files))
1472 0 0 unless eval "\n use File::Copy;\n copy(\$src, \$dst);\n "
1482 0 0 if ($self->tie_db_writable)
1489 0 0 if ($ret == 2) { }
1496 0 0 unless (eval { do { local $SIG{'__DIE__'}; my $main = $self->{'bayes'}{'main'}; my $path = $main->sed_path($main->{'conf'}{'bayes_path'}); local($1, $2, $3); my $dir = dirname($path); die "bayes: can't opendir ${dir}: $!" unless opendir DIR, $dir; my(@files) = grep({/^bayes_(?:seen|toks)(?:\.\w+)?$/;} readdir DIR); die "bayes: can't close directory ${dir}: $!" unless closedir DIR; if (@files < 2 or not grep(/bayes_seen/, @files) or not grep(/bayes_toks/, @files)) { die "bayes: unable to find bayes_toks and bayes_seen, stopping\n"; } ; untaint_var(\@files); foreach $_ (@files) { my $src = "$dir/$_"; my $dst = "$dir/old_$_"; die "bayes: can't copy $src to ${dst}: $!\n" unless eval "\n use File::Copy;\n copy(\$src, \$dst);\n "; } ; foreach $_ (@files) { unlink "$dir/$_"; } ; if ($self->tie_db_writable) { $ret += $self->upgrade_old_dbm_files_trapped("$dir/old_bayes_seen", $self->{'db_seen'}); $ret += $self->upgrade_old_dbm_files_trapped("$dir/old_bayes_toks", $self->{'db_toks'}); } ; if ($ret == 2) { print qq[import successful, original files saved with "old" prefix\n]; } else { print qq[import failed, original files saved with "old" prefix\n]; } ; 1 } })
1497 0 0 $@ ne '' ? :
1503 0 0 if (defined $eval_stat)
1532 0 0 unless (eval 'use ' . $dbm . qq[;\n tie %in, "] . $dbm . qq[", \$filename, O_RDONLY, 0600;\n %{ \$output } = %in;\n \$count = scalar keys %{ \$output };\n untie %in;\n 1;\n ])
1533 0 0 $@ ne '' ? :
1535 0 0 if (defined $eval_stat) { }
0 0 elsif ($count == 0) { }
1554 0 2 unless $self->tie_db_writable
1561 4 0 if (exists $self->{$db_var})
1574 8 4 $ret ? :
1583 2 0 $ret ? :
1596 0 0 unless $self->tie_db_writable
1605 0 0 if $tok =~ /^\015\001\007\011\003/
1625 0 0 unless (open DUMPFILE, '<', $filename)
1630 0 0 unless ($self->tie_db_writable)
1649 0 0 unless (tie %new_toks, $self->DBM_MODULE, $tmptoksdbname, 194, oct $main->{'conf'}{'bayes_file_mode'} & 438)
1656 0 0 unless (tie %new_seen, $self->DBM_MODULE, $tmpseendbname, 194, oct $main->{'conf'}{'bayes_file_mode'} & 438)
1680 0 0 unless defined $line
1686 0 0 if ($line =~ /^v\s+(\d+)\s+db_version/) { }
1699 0 0 unless ($db_version == 2 or $db_version == 3)
1713 0 0 if ($line_count % 1000 == 0)
1714 0 0 if $showdots
1717 0 0 if ($line =~ /^v\s+/) { }
0 0 elsif ($line =~ /^t\s+/) { }
0 0 elsif ($line =~ /^s\s+/) { }
1720 0 0 if ($parsed_line[2] eq 'num_spam') { }
0 0 elsif ($parsed_line[2] eq 'num_nonspam') { }
1740 0 0 if ($spam_count < 0)
1745 0 0 if ($ham_count < 0)
1751 0 0 if ($spam_count == 0 and $ham_count == 0)
1756 0 0 if ($atime > time)
1762 0 0 if ($token_warn_p)
1768 0 0 if ($db_version < 3) { }
1777 0 0 if ($atime < $oldest_token_age)
1780 0 0 if ($atime > $newest_token_age)
1790 0 0 unless ($flag eq 'h' or $flag eq 's')
1795 0 0 unless ($msgid)
1807 0 0 unless defined $line or $! == 0
1808 0 0 unless close DUMPFILE
1810 0 0 if $showdots
1812 0 0 unless (defined $num_spam)
1817 0 0 unless (defined $num_ham)
1822 0 0 if ($error_p)
1849 0 0 unless am_running_on_windows()
1859 0 0 unless ($self->_rename_file($tmptoksdbname, $toksdbname))
1863 0 0 unless ($self->_rename_file($tmpseendbname, $seendbname))
1905 5536 0 if ($self->{'db_version'} >= 1) { }
0 0 elsif ($self->{'db_version'} == 0) { }
1912 3138 2398 if (($packed & 192) == 192) { }
2398 0 elsif (($packed & 192) == 0) { }
1919 2398 0 if ($self->{'db_version'} >= 1) { }
0 0 elsif ($self->{'db_version'} == 0) { }
1937 1662 0 if ($ts < 8 and $th < 8) { }
1967 0 0 unless rename $sourcefilename, $targetfilename