From f63bdad8579f96901e08d2e7d9cd46ea528ffcce Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sat, 4 Apr 2020 06:17:29 +0000 Subject: inboxwritable: fix From_ line unescaping We can't rely on Email::MIME noticing the change to our scalar ref after calling `PublicInbox::MIME->new'. This is because Email::MIME::body_set (unlike Email::Simple::body_set) will copy the contents of the body into `->{body_raw}' as a new scalar. Furthermore, we need to escape multiple From lines in the body, not just the first one, using the `g' modifier to `s//'. Reported-by: Kyle Meyer --- lib/PublicInbox/InboxWritable.pm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'lib/PublicInbox/InboxWritable.pm') diff --git a/lib/PublicInbox/InboxWritable.pm b/lib/PublicInbox/InboxWritable.pm index ce979ea2..f2ba21fc 100644 --- a/lib/PublicInbox/InboxWritable.pm +++ b/lib/PublicInbox/InboxWritable.pm @@ -157,12 +157,12 @@ my $from_strict = qr/^From \S+ +\S+ \S+ +\S+ [^:]+:[^:]+:[^:]+ [^:]+/; sub mb_add ($$$$) { my ($im, $variant, $filter, $msg) = @_; $$msg =~ s/(\r?\n)+\z/$1/s; - my $mime = PublicInbox::MIME->new($msg); if ($variant eq 'mboxrd') { - $$msg =~ s/^>(>*From )/$1/sm; + $$msg =~ s/^>(>*From )/$1/gms; } elsif ($variant eq 'mboxo') { - $$msg =~ s/^>From /From /sm; + $$msg =~ s/^>From /From /gms; } + my $mime = PublicInbox::MIME->new($msg); if ($filter) { my $ret = $filter->scrub($mime) or return; return if $ret == REJECT(); -- cgit v1.2.3-24-ge0c7