]> Sergey Matveev's repositories - public-inbox.git/commitdiff
eml: drop trailing blank line on missing epilogue
authorEric Wong <e@yhbt.net>
Thu, 7 May 2020 21:05:56 +0000 (21:05 +0000)
committerEric Wong <e@yhbt.net>
Sat, 9 May 2020 08:59:10 +0000 (08:59 +0000)
This improves Email::MIME compatibility when running
xt/cmp-msgview.t on some GPG-signed messages.

Its usefulness is dubious in the long term and this patch
may be reverted down the line.

lib/PublicInbox/Eml.pm

index 1adaff04f7be871d1ab9343c4bb737436b603d09..4508bd84c6b1b3457fa7b9247331b94694eabc51 100644 (file)
@@ -131,8 +131,12 @@ sub mp_descend ($$) {
        # Cut at the the first epilogue, not subsequent ones.
        # *sigh* just the regexp match alone seems to bump RSS by
        # length($$bdy) on a ~30M string:
-       $$bdy =~ /((?:\r?\n)?^--$bnd--[ \t]*\r?$)/gsm and
+       my $epilogue_missing;
+       if ($$bdy =~ /((?:\r?\n)?^--$bnd--[ \t]*\r?$)/gsm) {
                substr($$bdy, pos($$bdy) - length($1)) = '';
+       } else {
+               $epilogue_missing = 1;
+       }
 
        # *Sigh* split() doesn't work in-place and return CoW strings
        # because Perl wants to "\0"-terminate strings.  So split()
@@ -150,6 +154,10 @@ sub mp_descend ($$) {
 
        if (@parts) { # the usual path if we got this far:
                undef $bdy; # release memory ASAP if $nr > 0
+
+               # compatibility with Email::MIME
+               $parts[-1] =~ s/\n\r?\n\z/\n/s if $epilogue_missing;
+
                @parts = grep /[^ \t\r\n]/s, @parts; # ignore empty parts
 
                # Keep "From: someone..." from preamble in old,