From c6b49ae752e642d779941a63bc65d5107e7010f1 Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Tue, 31 May 2011 15:39:26 -0700 Subject: [PATCH] test: Add test showing notmuch corrupts a part with a CRLF pair in it Since commit 2f8871df6ea3c0b44f85a0fc1b4f58a6b70b0a0e notmuch has been using a function (show_part_content) originally written only for text parts to save all MIME parts. The problem with this is that this function converts CRLF pairs to LF only and optionally converts to UTF-8 encoding. These two conversions have the potential to corrupt binary data when passed through the function. This test demonstrates that corruption, and so fails currently, until we fix the bug. --- test/multipart | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/test/multipart b/test/multipart index 1bcdfa25..c8050787 100755 --- a/test/multipart +++ b/test/multipart @@ -56,6 +56,39 @@ W6cAmQE4dcYrx/LPLtYLZm1jsGauE5hE -----END PGP SIGNATURE----- --==-=-=-- EOF + +cat < ${MAIL_DIR}/base64-part-with-crlf +From: Carl Worth +To: cworth@cworth.org +Subject: Test message with a BASE64 encoded binary containing CRLF pair +Date: Tue, 05 Jan 2001 15:43:57 -0000 +User-Agent: Notmuch/0.5 (http://notmuchmail.org) Emacs/23.3.1 (i486-pc-linux-gnu) +Message-ID: +MIME-Version: 1.0 +Content-Type: multipart/mixed; boundary="==-=-="; + +--==-=-= + +The attached BASE64-encoded part expands to a binary containing a CRLF +pair (that is one bye of 0x0D followed by one byte of 0x0A). This is +designed to ensure that notmuch is not corrupting the output of this +part by converting the CRLF pair to an LF only (as would be appropriate +for display of a text part on a Linux system, for example). + +The part should be a 3-byte file with the following sequence of 3 +hexadecimal bytes: + + EF 0D 0A + +--==-=-= +Content-Type: application/octet-stream +Content-Disposition: attachment; filename=crlf.bin +Content-Transfer-Encoding: base64 + +7w0K +--==-=-=-- +EOF +increment_mtime "$MAIL_DIR" notmuch new > /dev/null test_begin_subtest "--format=text --part=0, full message" @@ -324,5 +357,9 @@ Non-text part: text/html > -Carl Non-text part: application/pgp-signature" +test_begin_subtest "'notmuch show --part' does not corrupt a part with CRLF pair" +notmuch show --format=raw --part=3 id:base64-part-with-crlf > crlf.out +echo -n -e "\xEF\x0D\x0A" > crlf.expected +test_expect_equal_file crlf.out crlf.expected test_done -- 2.43.0