From 7d82a8bc04ce2e686371abc6b438ab121b9fa7d0 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sun, 30 Dec 2018 12:41:25 +0000 Subject: handle "multipart/mixed" messages which are not multipart I've found two examples on https://lore.kernel.org/lkml/ where the messages declared themselves to be "multipart/mixed" but were actually plain text: <87llgalspt.fsf@free.fr> <200308111450.h7BEoOu20077@mail.osdl.org> With the mboxrd downloaded, mutt is able to view them without difficulty. Note: this change would require reindexing of Xapian to pick up the changes. But it's only two ancient messages, the first was resent by the original sender and the second is too old to be relevant. --- lib/PublicInbox/View.pm | 25 +++---------------------- 1 file changed, 3 insertions(+), 22 deletions(-) (limited to 'lib/PublicInbox/View.pm') diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm index 86acd824..bb49c035 100644 --- a/lib/PublicInbox/View.pm +++ b/lib/PublicInbox/View.pm @@ -543,33 +543,14 @@ sub add_text_body { my ($part, $depth) = @$p; # attachment @idx is unused my $ct = $part->content_type || 'text/plain'; my $fn = $part->filename; + my ($s, $err) = msg_part_text($part, $ct); - if ($ct =~ m!\btext/x?html\b!i) { - return attach_link($upfx, $ct, $p, $fn); - } - - my $s = eval { $part->body_str }; - - # badly-encoded message? tell the world about it! - my $err = $@; - if ($err) { - if ($ct =~ m!\btext/plain\b!i) { - # Try to assume UTF-8 because Alpine seems to - # do wacky things and set charset=X-UNKNOWN - $part->charset_set('UTF-8'); - $s = eval { $part->body_str }; - - # If forcing charset=UTF-8 failed, - # attach_link will warn further down... - $s = $part->body if $@; - } else { - return attach_link($upfx, $ct, $p, $fn); - } - } + return attach_link($upfx, $ct, $p, $fn) unless defined $s; my @lines = split(/^/m, $s); $s = ''; if (defined($fn) || $depth > 0 || $err) { + # badly-encoded message with $err? tell the world about it! $s .= attach_link($upfx, $ct, $p, $fn, $err); $s .= "\n"; } -- cgit v1.2.3-24-ge0c7