-# 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
}
}
} else {
- $cb->([$mime, 0, 0], $cb_arg);
+ $cb->([$mime, 0, 1], $cb_arg);
}
}
# times when it should not have been:
# <87llgalspt.fsf@free.fr>
# <200308111450.h7BEoOu20077@mail.osdl.org>
+ # But also do not try this with ->{is_submsg} (message/rfc822),
+ # since a broken multipart/mixed inside a message/rfc822 part
+ # has not been seen in the wild, yet...
if ($err && ($ct =~ m!\btext/\b!i ||
- $ct =~ m!\bmultipart/mixed\b!i)) {
+ (!$part->{is_submsg} &&
+ $ct =~ m!\bmultipart/mixed\b!i) ) ) {
my $cte = $part->header_raw('Content-Transfer-Encoding');
if (defined($cte) && $cte =~ /\b7bit\b/i) {
$s = $part->body;
# 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;