about summary refs log tree commit homepage
path: root/lib/PublicInbox
diff options
context:
space:
mode:
authorEric Wong <e@yhbt.net>2020-04-04 06:17:29 +0000
committerEric Wong <e@yhbt.net>2020-04-04 17:48:58 +0000
commitf63bdad8579f96901e08d2e7d9cd46ea528ffcce (patch)
tree462323d278fd121f24880cd6e586e63ff54f93f1 /lib/PublicInbox
parent1a02e2d367b71eca9fc8093ce83fcae50873003d (diff)
downloadpublic-inbox-f63bdad8579f96901e08d2e7d9cd46ea528ffcce.tar.gz
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 <kyle@kyleam.com>
Diffstat (limited to 'lib/PublicInbox')
-rw-r--r--lib/PublicInbox/InboxWritable.pm6
1 files changed, 3 insertions, 3 deletions
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();