From: Eric Wong Date: Thu, 19 Apr 2018 22:42:05 +0000 (+0000) Subject: filter/rubylang: do not set altid on spam training X-Git-Tag: v1.1.0-pre1~19 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ddb61e55bc645975063673f346fceb96be7b2d70;p=thirdparty%2Fpublic-inbox.git filter/rubylang: do not set altid on spam training I suppose it's a bug or inconsistency that altid is write-only and their deletions do not get reflected. But for now, we do not set it when training spam so there's no window where an invalid NNTP article number shows up. This should solve the problem where there's massive gaps in messages solved by spam training for ruby groups: https://public-inbox.org/meta/20180307093754.GA27748@dcvr/ --- diff --git a/lib/PublicInbox/Filter/Base.pm b/lib/PublicInbox/Filter/Base.pm index 5d070132a..638b627af 100644 --- a/lib/PublicInbox/Filter/Base.pm +++ b/lib/PublicInbox/Filter/Base.pm @@ -66,9 +66,10 @@ sub reject ($$) { sub err ($) { $_[0]->{err} } # by default, scrub is a no-op, see PublicInbox::Filter::Vger::scrub -# for an example of the override +# for an example of the override. The $for_remove arg is set to +# disable altid setting for spam removal. sub scrub { - my ($self, $mime) = @_; + my ($self, $mime, $for_remove) = @_; $self->ACCEPT($mime); } diff --git a/lib/PublicInbox/Filter/RubyLang.pm b/lib/PublicInbox/Filter/RubyLang.pm index cb69e38a6..a43d67a93 100644 --- a/lib/PublicInbox/Filter/RubyLang.pm +++ b/lib/PublicInbox/Filter/RubyLang.pm @@ -30,7 +30,7 @@ sub new { } sub scrub { - my ($self, $mime) = @_; + my ($self, $mime, $for_remove) = @_; # no msg_iter here, that is only for read-only access $mime->walk_parts(sub { my ($part) = $_[0]; @@ -43,7 +43,7 @@ sub scrub { } }); my $altid = $self->{-altid}; - if ($altid) { + if ($altid && !$for_remove) { my $hdr = $mime->header_obj; my $mids = mids($hdr); return $self->REJECT('Message-ID missing') unless (@$mids); diff --git a/lib/PublicInbox/WatchMaildir.pm b/lib/PublicInbox/WatchMaildir.pm index 7ee29da54..10dc61841 100644 --- a/lib/PublicInbox/WatchMaildir.pm +++ b/lib/PublicInbox/WatchMaildir.pm @@ -126,7 +126,8 @@ sub _remove_spam { my $im = _importer_for($self, $ibx); $im->remove($mime, 'spam'); if (my $scrub = $ibx->filter) { - my $scrubbed = $scrub->scrub($mime) or return; + my $scrubbed = $scrub->scrub($mime, 1); + $scrubbed or return; $scrubbed == REJECT() and return; $im->remove($scrubbed, 'spam'); }