test: Add test showing notmuch corrupts a part with a CRLF pair in it
[notmuch] / test / multipart
index 80da0b452db51f8a71d503a43dafa47ae9c10cad..c80507875443071c9998f1540e3c8afe69d66795 100755 (executable)
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 test_description="output of multipart message"
 . ./test-lib.sh
 
@@ -29,7 +29,7 @@ Message-ID: <87liy5ap01.fsf@yoom.home.cworth.org>
 MIME-Version: 1.0
 Content-Type: text/html
 
-<p>This is an imbeded message, with a single html part.</p>
+<p>This is an embedded message, with a single html part.</p>
 
 --=-=-=
 Content-Disposition: attachment; filename=attachment
@@ -56,6 +56,39 @@ W6cAmQE4dcYrx/LPLtYLZm1jsGauE5hE
 -----END PGP SIGNATURE-----
 --==-=-=--
 EOF
+
+cat <<EOF > ${MAIL_DIR}/base64-part-with-crlf
+From: Carl Worth <cworth@cworth.org>
+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: <base64-part-with-crlf>
+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"
@@ -63,7 +96,7 @@ output=$(notmuch show --format=text --part=0 'id:87liy5ap00.fsf@yoom.home.cworth
 test_expect_equal "$output" \
 "\fmessage{ id:87liy5ap00.fsf@yoom.home.cworth.org depth:0 match:1 filename:${MAIL_DIR}/multipart
 \fheader{
-Carl Worth <cworth@cworth.org> (2001-01-05) (attachment inbox unread)
+Carl Worth <cworth@cworth.org> (2001-01-05) (attachment inbox signed unread)
 Subject: Multipart message
 From: Carl Worth <cworth@cworth.org>
 To: cworth@cworth.org
@@ -186,7 +219,7 @@ test_expect_success \
 test_begin_subtest "--format=json --part=0, full message"
 output=$(notmuch show --format=json --part=0 'id:87liy5ap00.fsf@yoom.home.cworth.org')
 test_expect_equal "$output" \
-'{"id": "87liy5ap00.fsf@yoom.home.cworth.org", "match": true, "filename": "'"${MAIL_DIR}/multipart"'", "timestamp": 978709437, "date_relative": "2001-01-05", "tags": ["attachment","inbox","unread"], "headers": {"Subject": "Multipart message", "From": "Carl Worth <cworth@cworth.org>", "To": "cworth@cworth.org", "Cc": "", "Bcc": "", "Date": "Tue, 05 Jan 2001 15:43:57 -0000"}, "body": [{"id": 1, "content-type": "multipart/signed", "content": [{"id": 2, "content-type": "multipart/mixed", "content": [{"id": 3, "content-type": "message/rfc822", "content": [{"id": 4, "content-type": "text/html"}]}, {"id": 5, "content-type": "text/plain", "filename": "attachment", "content": "This is a text attachment.\n"}, {"id": 6, "content-type": "text/plain", "content": "And this message is signed.\n\n-Carl\n"}]}, {"id": 7, "content-type": "application/pgp-signature"}]}]}'
+'{"id": "87liy5ap00.fsf@yoom.home.cworth.org", "match": true, "filename": "'"${MAIL_DIR}/multipart"'", "timestamp": 978709437, "date_relative": "2001-01-05", "tags": ["attachment","inbox","signed","unread"], "headers": {"Subject": "Multipart message", "From": "Carl Worth <cworth@cworth.org>", "To": "cworth@cworth.org", "Cc": "", "Bcc": "", "Date": "Tue, 05 Jan 2001 15:43:57 -0000"}, "body": [{"id": 1, "content-type": "multipart/signed", "content": [{"id": 2, "content-type": "multipart/mixed", "content": [{"id": 3, "content-type": "message/rfc822", "content": [{"id": 4, "content-type": "text/html"}]}, {"id": 5, "content-type": "text/plain", "filename": "attachment", "content": "This is a text attachment.\n"}, {"id": 6, "content-type": "text/plain", "content": "And this message is signed.\n\n-Carl\n"}]}, {"id": 7, "content-type": "application/pgp-signature"}]}]}'
 
 test_begin_subtest "--format=json --part=1, message body"
 output=$(notmuch show --format=json --part=1 'id:87liy5ap00.fsf@yoom.home.cworth.org')
@@ -238,7 +271,7 @@ test_expect_equal "$output" "$(cat "${MAIL_DIR}"/multipart)"
 test_begin_subtest "--format=raw --part=1, message body"
 output=$(notmuch show --format=raw --part=1 'id:87liy5ap00.fsf@yoom.home.cworth.org')
 test_expect_equal "$output" \
-'<p>This is an imbeded message, with a single html part.</p>
+'<p>This is an embedded message, with a single html part.</p>
 This is a text attachment.
 And this message is signed.
 
@@ -254,7 +287,7 @@ W6cAmQE4dcYrx/LPLtYLZm1jsGauE5hE
 test_begin_subtest "--format=raw --part=2, multipart/mixed"
 output=$(notmuch show --format=raw --part=2 'id:87liy5ap00.fsf@yoom.home.cworth.org')
 test_expect_equal "$output" \
-'<p>This is an imbeded message, with a single html part.</p>
+'<p>This is an embedded message, with a single html part.</p>
 This is a text attachment.
 And this message is signed.
 
@@ -263,12 +296,12 @@ And this message is signed.
 test_begin_subtest "--format=raw --part=3, rfc822 multipart"
 output=$(notmuch show --format=raw --part=3 'id:87liy5ap00.fsf@yoom.home.cworth.org')
 test_expect_equal "$output" \
-'<p>This is an imbeded message, with a single html part.</p>'
+'<p>This is an embedded message, with a single html part.</p>'
 
 test_begin_subtest "--format=raw --part=4, html part"
 output=$(notmuch show --format=raw --part=4 'id:87liy5ap00.fsf@yoom.home.cworth.org')
 test_expect_equal "$output" \
-'<p>This is an imbeded message, with a single html part.</p>'
+'<p>This is an embedded message, with a single html part.</p>'
 
 test_begin_subtest "--format=raw --part=5, inline attachment"
 output=$(notmuch show --format=raw --part=5 'id:87liy5ap00.fsf@yoom.home.cworth.org')
@@ -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