From: David Levine Date: Wed, 5 Oct 2016 01:24:10 +0000 (-0400) Subject: Enabled check for 8-bit content in all text parts, not just those X-Git-Url: https://diplodocus.org/git/nmh/commitdiff_plain/1e1fb5ef266efa509026583cfc08ff3e38cdcaf1?ds=sidebyside;hp=931e88d1c3e9d1bc4bad3a230e50c97180daad9d Enabled check for 8-bit content in all text parts, not just those with no specified character set, so that a Content-Transfer-Encoding header will be added if needed. --- diff --git a/docs/pending-release-notes b/docs/pending-release-notes index cb3f09d8..ffcfcc9f 100644 --- a/docs/pending-release-notes +++ b/docs/pending-release-notes @@ -56,7 +56,6 @@ NEW FEATURES filename parameters in Content-Type and Content-Disposition headers, respectively. - ----------------- OBSOLETE FEATURES ----------------- @@ -88,3 +87,7 @@ BUG FIXES scan(1), inc(1), and the other programs that rely on the format scanner. - The first character of some very short (less than 4 characters) message bodies is no longer dropped. +- mhfixmsg now adds a Content-Transfer-Encoding header at the message level, + if needed after decoding text parts. +- mhbuild now checks whether all text parts need a Content-Transfer-Encoding + header, not just those with a character set not specified. diff --git a/test/mhbuild/test-utf8-body b/test/mhbuild/test-utf8-body index 1a08a907..cb5aa953 100755 --- a/test/mhbuild/test-utf8-body +++ b/test/mhbuild/test-utf8-body @@ -49,7 +49,9 @@ test_attachment () check "${testname}.actual" "$1" } + # check that 7-bit body isn't encoded +start_test "7-bit body isn't encoded" cat > "${MH_TEST_DIR}/attachment.txt" < "${MH_TEST_DIR}/Mail/draft" < To: Somebody @@ -127,9 +130,41 @@ EOF test_attachment "${testname}.expected" -# Repeat the previous test, but make sure that the locale is set to C, which -# should cause mhbuild to fail +# check that 8-bit attachment gets C-T-E +start_test '8-bit attachment gets C-T-E' +rm -f "${MH_TEST_DIR}/attachment.txt" +cat > "${MH_TEST_DIR}/attachment.txt" < "${MH_TEST_DIR}/Mail/draft" < +To: Somebody +Subject: Test +Attach: $MH_TEST_DIR/attachment.txt +EOF + +cat > "${testname}.expected" < +To: Somebody +Subject: Test +MIME-Version: 1.0 +Content-Type: text/plain; name="attachment.txt" +Content-Description: attachment.txt +Content-Disposition: attachment; filename="attachment.txt" +Content-Transfer-Encoding: 8bit +Date: + +8-bit attachment, ¡Ay, caramba! +EOF + +test_attachment "${testname}.expected" + + +# check 8-bit body but make sure that the locale is set to C, which +# should cause mhbuild to fail +start_test '8-bit body with C locale' cat > "${MH_TEST_DIR}/Mail/draft" < To: Somebody @@ -152,8 +187,10 @@ EOF check "$expected" "$actual" + rm -f ${MHMTSCONF} "${MH_TEST_DIR}/attachment.txt" +finish_test exit ${failed:-0} # emacs hackage to ensure that it writes the inverted exclamation diff --git a/uip/mhbuildsbr.c b/uip/mhbuildsbr.c index 26d8524d..b59ea58b 100644 --- a/uip/mhbuildsbr.c +++ b/uip/mhbuildsbr.c @@ -1453,15 +1453,17 @@ scan_content (CT ct, size_t maxunencoded) * Decide what to check while scanning this content. Note that * for text content we always check for 8bit characters if the * charset is unspecified, because that controls whether or not the - * character set is us-ascii or retrieved from the locale. + * character set is us-ascii or retrieved from the locale. And + * we check even if the charset is specified, to allow setting + * the proper Content-Transfer-Encoding. */ if (ct->c_type == CT_TEXT) { t = (struct text *) ct->c_ctparams; if (t->tx_charset == CHARSET_UNSPECIFIED) { - check8bit = 1; checknul = 1; } + check8bit = 1; } switch (ct->c_reqencoding) {