locale character set is US-ASCII.
EOF
run_prog mhbuild "$draft"
-rm -f "$MH_TEST_DIR/tïny.jpg"
cat > "$expected" <<EOF
To: Mr Test <mrtest@example.com>
check "$draft" "$expected"
+#
+# Test to make sure things fail if we try to put 8-bit characters when the
+# locale is US-ASCII
+#
+
+cat > "$draft" <<EOF
+To: Mr Test <mrtest@example.com>
+cc:
+Fcc: +outbox
+------
+This is a test message
+#image/jpeg {attachment} $MH_TEST_DIR/tïny.jpg
+EOF
+
+old_locale="$LC_ALL"
+LC_ALL=C; export LC_ALL
+
+set +e
+run_test 'eval mhbuild "$draft" 2>&1' 'mhbuild: 8-bit characters in parameter "filename", but local character set is US-ASCII'
+set -e
+
+LC_ALL="$old_locale"; export LC_ALL
+
+rm -f "$MH_TEST_DIR/tïny.jpg"
+
#
# Test out message/external-body decoding
#
setup_test
testname="${MH_TEST_DIR}/$$"
+expected="$MH_TEST_DIR/$$.expected"
+actual="$MH_TEST_DIR/$$.actual"
LC_ALL=en_US.UTF-8; export LC_ALL
test_attachment "${testname}.expected"
+# Repeat the previous test, but make sure that the locale is set to C, which
+# should cause mhbuild to fail
+
+cat > "${MH_TEST_DIR}/Mail/draft" <<EOF
+From: Mr Nobody <nobody@example.com>
+To: Somebody <somebody@example.com>
+Subject: Test
+Attach: $MH_TEST_DIR/attachment.txt
+
+¡Ay, caramba!
+EOF
+
+LC_ALL="C"; export LC_ALL
+
+set +e
+run_prog send -draft -mts sendmail/pipe > "$actual" 2>&1
+set -e
+
+cat > "$expected" <<EOF
+mhbuild: Text content contains 8 bit characters, but character set is US-ASCII
+${MH_INST_DIR}${bindir}/mhbuild: exit 1
+EOF
+
+check "$expected" "$actual"
+
rm -f ${MHMTSCONF} "${MH_TEST_DIR}/attachment.txt"
exit ${failed:-0}
t = (struct text *) ct->c_ctparams;
if (t->tx_charset == CHARSET_UNSPECIFIED) {
CI ci = &ct->c_ctinfo;
+ char *eightbitcharset = write_charset_8bit();
+
+ if (contains8bit && strcasecmp(eightbitcharset, "US-ASCII") == 0) {
+ adios(NULL, "Text content contains 8 bit characters, but "
+ "character set is US-ASCII");
+ }
add_param(&ci->ci_first_pm, &ci->ci_last_pm, "charset",
- contains8bit ? write_charset_8bit() : "us-ascii", 0);
+ contains8bit ? eightbitcharset : "us-ascii", 0);
+
t->tx_charset = CHARSET_SPECIFIED;
}
}
* add them now.
*/
- if (! pm->pm_charset)
+ if (! pm->pm_charset) {
pm->pm_charset = getcpy(write_charset_8bit());
+ if (strcasecmp(pm->pm_charset, "US-ASCII") == 0)
+ adios(NULL, "8-bit characters in parameter \"%s\", but "
+ "local character set is US-ASCII", pm->pm_name);
+ }
if (! pm->pm_lang)
pm->pm_lang = getcpy(NULL); /* Default to a blank lang tag */