X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;ds=sidebyside;f=lib%2FPublicInbox%2FEml.pm;h=4508bd84c6b1b3457fa7b9247331b94694eabc51;hb=b2f2d28e20f7bf9e7234d3134ec91cd9549001b1;hp=1adaff04f7be871d1ab9343c4bb737436b603d09;hpb=0283273a14e1871955f6a9132f4f3f7884ec8a3f;p=public-inbox.git diff --git a/lib/PublicInbox/Eml.pm b/lib/PublicInbox/Eml.pm index 1adaff04..4508bd84 100644 --- a/lib/PublicInbox/Eml.pm +++ b/lib/PublicInbox/Eml.pm @@ -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,