From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-Status: No, score=-3.0 required=3.0 tests=ALL_TRUSTED,AWL,BAYES_00, URIBL_SBL,URIBL_SBL_A shortcircuit=no autolearn=no autolearn_force=no version=3.4.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 96FDF20068 for ; Thu, 4 Feb 2021 09:59:31 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 06/10] eml: handle warning ignores for lei Date: Thu, 4 Feb 2021 00:59:26 -0900 Message-Id: <20210204095930.20278-7-e@80x24.org> In-Reply-To: <20210204095930.20278-1-e@80x24.org> References: <20210204095930.20278-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: There's nothing we can do about bad emails in our search results, so quiet things down and don't fight the MUA for the terminal. --- lib/PublicInbox/Admin.pm | 7 +++---- lib/PublicInbox/Eml.pm | 19 +++++++++++++++++++ lib/PublicInbox/InboxWritable.pm | 24 +----------------------- lib/PublicInbox/LeiToMail.pm | 1 + lib/PublicInbox/Watch.pm | 14 ++++++-------- 5 files changed, 30 insertions(+), 35 deletions(-) diff --git a/lib/PublicInbox/Admin.pm b/lib/PublicInbox/Admin.pm index f96397ea..3b38a5a3 100644 --- a/lib/PublicInbox/Admin.pm +++ b/lib/PublicInbox/Admin.pm @@ -10,6 +10,7 @@ our @EXPORT_OK = qw(setup_signals); use PublicInbox::Config; use PublicInbox::Inbox; use PublicInbox::Spawn qw(popen_rd); +use PublicInbox::Eml; *rel2abs_collapsed = \&PublicInbox::Config::rel2abs_collapsed; sub setup_signals { @@ -241,12 +242,10 @@ sub index_inbox { } local %SIG = %SIG; setup_signals(\&index_terminate, $ibx); - my $warn_cb = $SIG{__WARN__} // \&CORE::warn; my $idx = { current_info => $ibx->{inboxdir} }; - my $warn_ignore = PublicInbox::InboxWritable->can('warn_ignore'); local $SIG{__WARN__} = sub { - return if $warn_ignore->(@_); - $warn_cb->($idx->{current_info}, ': ', @_); + return if PublicInbox::Eml::warn_ignore(@_); + warn($idx->{current_info}, ': ', @_); }; if (ref($ibx) && $ibx->version == 2) { eval { require PublicInbox::V2Writable }; diff --git a/lib/PublicInbox/Eml.pm b/lib/PublicInbox/Eml.pm index bd27f19b..f7f62e7b 100644 --- a/lib/PublicInbox/Eml.pm +++ b/lib/PublicInbox/Eml.pm @@ -477,6 +477,25 @@ sub charset_set { sub crlf { $_[0]->{crlf} // "\n" } +# warnings to ignore when handling spam mailboxes and maybe other places +sub warn_ignore { + my $s = "@_"; + # Email::Address::XS warnings + $s =~ /^Argument contains empty address at / + || $s =~ /^Element at index [0-9]+ contains / + # PublicInbox::MsgTime + || $s =~ /^bogus TZ offset: .+?, ignoring and assuming \+0000/ + || $s =~ /^bad Date: .+? in / + # Encode::Unicode::UTF7 + || $s =~ /^Bad UTF7 data escape at / +} + +# this expects to be RHS in this assignment: "local $SIG{__WARN__} = ..." +sub warn_ignore_cb { + my $cb = $SIG{__WARN__} // \&CORE::warn; + sub { $cb->(@_) unless warn_ignore(@_) } +} + sub willneed { re_memo($_) for @_ } willneed(qw(From To Cc Date Subject Content-Type In-Reply-To References diff --git a/lib/PublicInbox/InboxWritable.pm b/lib/PublicInbox/InboxWritable.pm index 982ad6e5..3a4012cd 100644 --- a/lib/PublicInbox/InboxWritable.pm +++ b/lib/PublicInbox/InboxWritable.pm @@ -9,7 +9,7 @@ use parent qw(PublicInbox::Inbox Exporter); use PublicInbox::Import; use PublicInbox::Filter::Base qw(REJECT); use Errno qw(ENOENT); -our @EXPORT_OK = qw(eml_from_path warn_ignore_cb); +our @EXPORT_OK = qw(eml_from_path); use constant { PERM_UMASK => 0, @@ -277,28 +277,6 @@ sub cleanup ($) { delete @{$_[0]}{qw(over mm git search)}; } -# warnings to ignore when handling spam mailboxes and maybe other places -sub warn_ignore { - my $s = "@_"; - # Email::Address::XS warnings - $s =~ /^Argument contains empty address at / - || $s =~ /^Element at index [0-9]+ contains / - # PublicInbox::MsgTime - || $s =~ /^bogus TZ offset: .+?, ignoring and assuming \+0000/ - || $s =~ /^bad Date: .+? in / - # Encode::Unicode::UTF7 - || $s =~ /^Bad UTF7 data escape at / -} - -# this expects to be RHS in this assignment: "local $SIG{__WARN__} = ..." -sub warn_ignore_cb { - my $cb = $SIG{__WARN__} // \&CORE::warn; - sub { - return if warn_ignore(@_); - $cb->(@_); - } -} - # v2+ only, XXX: maybe we can just rely on ->max_git_epoch and remove sub git_dir_latest { my ($self, $max) = @_; diff --git a/lib/PublicInbox/LeiToMail.pm b/lib/PublicInbox/LeiToMail.pm index 5a6f18fb..1f815e40 100644 --- a/lib/PublicInbox/LeiToMail.pm +++ b/lib/PublicInbox/LeiToMail.pm @@ -472,6 +472,7 @@ sub ipc_atfork_child { close $zpipe->[0]; } $self->{wcb} = $self->write_cb($lei); + $SIG{__WARN__} = PublicInbox::Eml::warn_ignore_cb(); $self->SUPER::ipc_atfork_child; } diff --git a/lib/PublicInbox/Watch.pm b/lib/PublicInbox/Watch.pm index 2b44ba43..185e5da8 100644 --- a/lib/PublicInbox/Watch.pm +++ b/lib/PublicInbox/Watch.pm @@ -7,7 +7,7 @@ package PublicInbox::Watch; use strict; use v5.10.1; use PublicInbox::Eml; -use PublicInbox::InboxWritable qw(eml_from_path warn_ignore_cb); +use PublicInbox::InboxWritable qw(eml_from_path); use PublicInbox::Filter::Base qw(REJECT); use PublicInbox::Spamcheck; use PublicInbox::Sigfd; @@ -174,7 +174,7 @@ sub _remove_spam { # path must be marked as (S)een $path =~ /:2,[A-R]*S[T-Za-z]*\z/ or return; my $eml = eml_from_path($path) or return; - local $SIG{__WARN__} = warn_ignore_cb(); + local $SIG{__WARN__} = PublicInbox::Eml::warn_ignore_cb(); $self->{pi_cfg}->each_inbox(\&remove_eml_i, $self, $eml, $path); } @@ -414,13 +414,11 @@ sub imap_import_msg ($$$$$) { import_eml($self, $ibx, $eml); } } elsif ($inboxes eq 'watchspam') { - # we don't remove unseen messages - if ($flags =~ /\\Seen\b/) { - local $SIG{__WARN__} = warn_ignore_cb(); - my $eml = PublicInbox::Eml->new($raw); - $self->{pi_cfg}->each_inbox(\&remove_eml_i, + return if $flags !~ /\\Seen\b/; # don't remove unseen messages + local $SIG{__WARN__} = PublicInbox::Eml::warn_ignore_cb(); + my $eml = PublicInbox::Eml->new($raw); + $self->{pi_cfg}->each_inbox(\&remove_eml_i, $self, $eml, "$url UID:$uid"); - } } else { die "BUG: destination unknown $inboxes"; }