diff options
Diffstat (limited to 'lib/PublicInbox/MsgIter.pm')
-rw-r--r-- | lib/PublicInbox/MsgIter.pm | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/lib/PublicInbox/MsgIter.pm b/lib/PublicInbox/MsgIter.pm index bb1dfead..dd28417b 100644 --- a/lib/PublicInbox/MsgIter.pm +++ b/lib/PublicInbox/MsgIter.pm @@ -1,4 +1,4 @@ -# Copyright (C) 2016-2020 all contributors <meta@public-inbox.org> +# Copyright (C) 2016-2021 all contributors <meta@public-inbox.org> # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt> # read-only utilities for Email::MIME @@ -84,18 +84,30 @@ sub msg_part_text ($$) { # If forcing charset=UTF-8 failed, # caller will warn further down... $s = $part->body if $@; + } elsif ($err && $ct =~ m!\bapplication/octet-stream\b!i) { + # Some unconfigured/poorly-configured MUAs will set + # application/octet-stream even for all text attachments. + # Try to see if it's printable text that we can index + # and display: + $s = $part->body; + utf8::decode($s); + undef($s =~ /[^\p{XPosixPrint}\s]/s ? $s : $err); } ($s, $err); } # returns an array of quoted or unquoted sections sub split_quotes { + # some editors don't put trailing newlines at the end, + # make sure split_quotes can work: + $_[0] .= "\n" if substr($_[0], -1) ne "\n"; + # Quiet "Complex regular subexpression recursion limit" warning # in case an inconsiderate sender quotes 32K of text at once. # The warning from Perl is harmless for us since our callers can # tolerate less-than-ideal matches which work within Perl limits. no warnings 'regexp'; - split(/((?:^>[^\n]*\n)+)/sm, shift); + split(/((?:^>[^\n]*\n)+)/sm, $_[0]); } 1; |