Hi all, I noticed some multipart messages were being rendered
incorrectly on the git mailing list archives I sometimes(*)
run at https://public-inbox.org/git/ using Email::MIME.

I noticed this problem with Email::MIME 1.926 on Debian stable,
but also reproduced it with 1.937 from unstable.

The problem manifests when the part has no header.
For example, the first rendered part of the message at is
missing the first 3 lines of the body:
https://public-inbox.org/git/20170110004031.57985-1-hans...@google.com/
shows the following (indented 4 spaces in this email):

    [-- Attachment #1: Type: text/plain, Size: 166 bytes --]

     Documentation/diff-config.txt  | 5 ++++-
     Documentation/diff-options.txt | 3 ++-
     2 files changed, 6 insertions(+), 2 deletions(-)

    --
    2.11.0.390.gc69c2f50cf-goog

However, closer inspection shows 3 lines missing off the top
of the body from what I see in mutt, or from the "raw" mboxrd
message:
https://public-inbox.org/git/20170110004031.57985-1-hans...@google.com/raw

The problematic part is the newline before "Richard Hansen (2):"
line seems ignored as no headers follow the
"--94eb2c0bc864b76ba30545b2bca9" boundary, and that fools
Email::MIME.

Here's the first part with boundary (indented 4 spaces, again)

    --94eb2c0bc864b76ba30545b2bca9

    Richard Hansen (2):
      diff: document behavior of relative diff.orderFile
      diff: document the pattern format for diff.orderFile

     Documentation/diff-config.txt  | 5 ++++-
     Documentation/diff-options.txt | 3 ++-
     2 files changed, 6 insertions(+), 2 deletions(-)

    -- 
    2.11.0.390.gc69c2f50cf-goog


So, there's no mail headers in the first part, but Email::MIME
thinks part of the body contains headers!  Attached is a
standalone script which shows the problem independently.

Reading the parts_multipart sub in Email::MIME, I can see
there's quite a few quirks in there and I'm not comfortable
messing with already-working cases (at least not at this hour).


I checked RFC 1521 and it appears headerless part boundaries
are allowed.  But I'm actually not sure how Richard generates
his emails and signatures.  I don't think anybody else
cryptographically signs patches on g...@vger.kernel.org,
nor was it ever encouraged for Linux kernel development
(and S/MIME signatures are huge, even compared to PGP).



(*) In the likely case public-inbox.org is down, there are at
    least two Tor .onion mirrors in different locations using
    the same URL patterns:

        http://hjrcffqmbrq6wope.onion/git/<Message-ID>/
        http://czquwvybam4bgbro.onion/git/<Message-ID>/
use strict;
use warnings;
use Email::MIME;

my $msg = Email::MIME->new('From:   Richard Hansen <hans...@google.com>
To:     g...@vger.kernel.org
Cc:     Richard Hansen <hans...@google.com>
Subject: [PATCH 0/2] minor diff orderfile documentation improvements
Date:   Mon,  9 Jan 2017 19:40:29 -0500
Message-Id: <20170110004031.57985-1-hans...@google.com>
X-Mailer: git-send-email 2.11.0.390.gc69c2f50cf-goog
Content-Type: multipart/signed; protocol="application/pkcs7-signature"; 
micalg=sha-256;
        boundary="94eb2c0bc864b76ba30545b2bca9"

--94eb2c0bc864b76ba30545b2bca9

Richard Hansen (2):
  diff: document behavior of relative diff.orderFile
  diff: document the pattern format for diff.orderFile

 Documentation/diff-config.txt  | 5 ++++-
 Documentation/diff-options.txt | 3 ++-
 2 files changed, 6 insertions(+), 2 deletions(-)

-- 
2.11.0.390.gc69c2f50cf-goog


--94eb2c0bc864b76ba30545b2bca9
Content-Type: application/pkcs7-signature; name="smime.p7s"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7s"
Content-Description: (truncated) S/MIME Cryptographic Signature

dkTlB69771K2eXK4LcHSH/2LqX+VYa3K44vrx1ruzjXdNWzIpKBy0weFNiwnJCGofvCysM2RCSI1
--94eb2c0bc864b76ba30545b2bca9--

');

my @parts = $msg->parts;

print "<HEADER>\n", $parts[0]->header_obj->as_string, "\n</HEADER>\n";
print "<BODY>\n", $parts[0]->body, "\n</BODY>\n";

Reply via email to