]> diplodocus.org Git - nmh/commitdiff
Allow mhfixmsg -reformat to succeed even when decode of binary
authorDavid Levine <levinedl@acm.org>
Sat, 27 Apr 2013 18:26:18 +0000 (13:26 -0500)
committerDavid Levine <levinedl@acm.org>
Sat, 27 Apr 2013 18:26:18 +0000 (13:26 -0500)
text fails.  This is a refinement of commit
ebf35185aa9256b0cd09234f39bd14db9e90e81c.

test/mhfixmsg/test-mhfixmsg
uip/mhfixmsg.c

index 5ac77ca5e6e0ebefcdea4dbc27a6ced6dd5e6230..10ac24ec2978fcb0d954b9559bc58b6642a0d06f 100755 (executable)
@@ -409,8 +409,7 @@ This is a text/plain part.
 ------- =_aaaaaaaaaa0--
 EOF
 
 ------- =_aaaaaaaaaa0--
 EOF
 
-msgfile=`mhpath new`
-cat >$msgfile <<EOF
+cat >`mhpath new` <<EOF
 To: recipient@example.com
 From: sender@example.com
 Subject: mhfixmsg decode test
 To: recipient@example.com
 From: sender@example.com
 Subject: mhfixmsg decode test
@@ -482,8 +481,7 @@ This is the fourth text/plain part.
 This is additional content after the last subpart of the multipart.
 EOF
 
 This is additional content after the last subpart of the multipart.
 EOF
 
-msgfile=`mhpath new`
-cat >$msgfile <<EOF
+cat >`mhpath new` <<EOF
 To: recipient@example.com
 From: sender@example.com
 Subject: mhfixmsg decode test 2
 To: recipient@example.com
 From: sender@example.com
 Subject: mhfixmsg decode test 2
@@ -539,8 +537,7 @@ check "$expected" "$actual"
 # check attempted -decode of binary text
 #### Generated the encoded text below with:
 ####   $ printf '\x0d\xbd\xb2=\xbc\n' | base64
 # check attempted -decode of binary text
 #### Generated the encoded text below with:
 ####   $ printf '\x0d\xbd\xb2=\xbc\n' | base64
-msgfile=`mhpath new`
-cat >$msgfile <<EOF
+cat >`mhpath new` <<EOF
 To: recipient@example.com
 From: sender@example.com
 Subject: mhfixmsg attempted binary decode test
 To: recipient@example.com
 From: sender@example.com
 Subject: mhfixmsg attempted binary decode test
@@ -585,6 +582,95 @@ rm -f "$expected"
 rmm last
 
 
 rmm last
 
 
+# check that -reformat succeeds when decode of binary text fails
+cat >"$expected" <<'EOF'
+MIME-Version: 1.0
+Date: Thu, 11 Apr 2013 02:47:08 -0700
+To: <me@example.com>
+From: <sender@example.com>
+Subject: body requires binary encoding
+Content-Type: multipart/alternative; boundary="----=_nmh-multipart"
+
+------=_nmh-multipart
+Content-Type: text/plain; charset="ISO-8859-1"
+Content-Transfer-Encoding: 8bit
+
+Mile                                     $0.00
+Time                                    $78.71
+State Tax                                $5.90
+Vehicle License Fee                      $1.84
+State Txn Tax                            $6.00
+
+------=_nmh-multipart
+Content-Type: text/html; charset="ISO-8859-1"
+Content-Transfer-Encoding: quoted-printable
+
+<body>
+<table width=3D"325" border=3D"0" cellspacing=3D"0" cellpadding=3D"0">
+<tr><td><font face=3D"Arial, Helvetica, sans-serif" color=3D"#333333" size=
+=3D"2"><strong>Mile</strong></font></td><td height=3D"3">&nbsp;</td><td al=
+ign=3D"right"><font face=3D"Arial, Helvetica, sans-serif" color=3D"#333333=
+" size=3D"2">$0.00</font></td></tr><tr><td><font face=3D"Arial, Helvetica,=
+ sans-serif" color=3D"#333333" size=3D"2"><strong>Time</strong></font></td=
+><td height=3D"3">&nbsp;</td><td align=3D"right"><font face=3D"Arial, Helv=
+etica, sans-serif" color=3D"#333333" size=3D"2">$78.71</font></td></tr><tr=
+><td><font face=3D"Arial, Helvetica, sans-serif" color=3D"#333333" size=3D=
+"2"><strong>State Tax</strong></font></td><td height=3D"3">&nbsp;</td><td =
+align=3D"right"><font face=3D"Arial, Helvetica, sans-serif" color=3D"#3333=
+33" size=3D"2">$5.90</font></td></tr><tr><td><font face=3D"Arial, Helvetic=
+a, sans-serif" color=3D"#333333" size=3D"2"><strong>Vehicle License Fee</s=
+trong></font></td><td height=3D"3">&nbsp;</td><td align=3D"right"><font fa=
+ce=3D"Arial, Helvetica, sans-serif" color=3D"#333333" size=3D"2">$1.84</fo=
+nt></td></tr><tr><td><font face=3D"Arial, Helvetica, sans-serif" color=3D"=
+#333333" size=3D"2"><strong>State Txn Tax</strong></font></td><td height=3D=
+"3">&nbsp;</td><td align=3D"right"><font face=3D"Arial, Helvetica, sans-se=
+rif" color=3D"#333333" size=3D"2">$6.00</font></td></tr>
+
+</body>
+</html>
+
+------=_nmh-multipart--
+EOF
+
+cat >`mhpath new` <<'EOF'
+MIME-Version: 1.0
+Content-Type: text/html; charset="ISO-8859-1"
+Content-Transfer-Encoding: quoted-printable
+Date: Thu, 11 Apr 2013 02:47:08 -0700
+To: <me@example.com>
+From: <sender@example.com>
+Subject: body requires binary encoding
+
+<body>
+<table width=3D"325" border=3D"0" cellspacing=3D"0" cellpadding=3D"0">
+<tr><td><font face=3D"Arial, Helvetica, sans-serif" color=3D"#333333" size=
+=3D"2"><strong>Mile</strong></font></td><td height=3D"3">&nbsp;</td><td ali=
+gn=3D"right"><font face=3D"Arial, Helvetica, sans-serif" color=3D"#333333" =
+size=3D"2">$0.00</font></td></tr><tr><td><font face=3D"Arial, Helvetica, sa=
+ns-serif" color=3D"#333333" size=3D"2"><strong>Time</strong></font></td><td=
+ height=3D"3">&nbsp;</td><td align=3D"right"><font face=3D"Arial, Helvetica=
+, sans-serif" color=3D"#333333" size=3D"2">$78.71</font></td></tr><tr><td><=
+font face=3D"Arial, Helvetica, sans-serif" color=3D"#333333" size=3D"2"><st=
+rong>State Tax</strong></font></td><td height=3D"3">&nbsp;</td><td align=3D=
+"right"><font face=3D"Arial, Helvetica, sans-serif" color=3D"#333333" size=
+=3D"2">$5.90</font></td></tr><tr><td><font face=3D"Arial, Helvetica, sans-s=
+erif" color=3D"#333333" size=3D"2"><strong>Vehicle License Fee</strong></fo=
+nt></td><td height=3D"3">&nbsp;</td><td align=3D"right"><font face=3D"Arial=
+, Helvetica, sans-serif" color=3D"#333333" size=3D"2">$1.84</font></td></tr=
+><tr><td><font face=3D"Arial, Helvetica, sans-serif" color=3D"#333333" size=
+=3D"2"><strong>State Txn Tax</strong></font></td><td height=3D"3">&nbsp;</t=
+d><td align=3D"right"><font face=3D"Arial, Helvetica, sans-serif" color=3D"=
+#333333" size=3D"2">$6.00</font></td></tr>
+
+</body>
+</html>
+EOF
+
+#### lynx inserts multiple blank lines, so use uniq to squeeze them.
+mhfixmsg last -outfile - | uniq >"$actual"
+check "$expected" "$actual" 'ignore space'
+
+
 # check -textcodeset
 # Also checks preservation of attributes after one (charset) that is
 # modified.
 # check -textcodeset
 # Also checks preservation of attributes after one (charset) that is
 # modified.
@@ -607,8 +693,7 @@ EOF
 
 #### Generated the encoded text below with:
 ####   $ printf '\xbd\xb2=\xbc\n' | base64
 
 #### Generated the encoded text below with:
 ####   $ printf '\xbd\xb2=\xbc\n' | base64
-msgfile=`mhpath new`
-cat >$msgfile <<EOF
+cat >`mhpath new` <<EOF
 To: recipient@example.com
 From: sender@example.com
 Subject: mhfixmsg textcodeset test
 To: recipient@example.com
 From: sender@example.com
 Subject: mhfixmsg textcodeset test
@@ -665,7 +750,7 @@ EOF
 cp -p `mhpath last` `mhpath new`
 
 run_test 'mhfixmsg last -nofixboundary' ''
 cp -p `mhpath last` `mhpath new`
 
 run_test 'mhfixmsg last -nofixboundary' ''
-check "$MH_TEST_DIR"/Mail/inbox/16 "$MH_TEST_DIR"/Mail/inbox/17 'keep first'
+check "$MH_TEST_DIR"/Mail/inbox/17 "$MH_TEST_DIR"/Mail/inbox/18 'keep first'
 
 
 # check that message is not output when fed through stdin
 
 
 # check that message is not output when fed through stdin
@@ -704,7 +789,7 @@ The boundaries of this part don't match the header boundary.
 EOF
 
 run_test 'mhfixmsg last -outfile '"$actual"' -verbose' \
 EOF
 
 run_test 'mhfixmsg last -outfile '"$actual"' -verbose' \
-         "mhfixmsg: 16, fix multipart boundary"
+         "mhfixmsg: 17, fix multipart boundary"
 check "$expected" "$actual"
 
 
 check "$expected" "$actual"
 
 
@@ -853,24 +938,24 @@ mv "$1" "$1.backup"
 EOF
 chmod a+x "${MH_TEST_DIR}/Mail/rmmproc"
 echo "rmmproc: ${MH_TEST_DIR}/Mail/rmmproc" >>"$MH"
 EOF
 chmod a+x "${MH_TEST_DIR}/Mail/rmmproc"
 echo "rmmproc: ${MH_TEST_DIR}/Mail/rmmproc" >>"$MH"
-cp "${MH_TEST_DIR}/Mail/inbox/14" "${MH_TEST_DIR}/Mail/inbox/14.original"
+cp "${MH_TEST_DIR}/Mail/inbox/15" "${MH_TEST_DIR}/Mail/inbox/15.original"
 
 
-run_test 'mhfixmsg 14' ''
-check "${MH_TEST_DIR}/Mail/inbox/14.backup" \
-      "${MH_TEST_DIR}/Mail/inbox/14.original"
+run_test 'mhfixmsg 15' ''
+check "${MH_TEST_DIR}/Mail/inbox/15.backup" \
+      "${MH_TEST_DIR}/Mail/inbox/15.original"
 
 
 # check -normmproc
 
 
 # check -normmproc
-cp "${MH_TEST_DIR}/Mail/inbox/18" "${MH_TEST_DIR}/Mail/inbox/19"
+cp "${MH_TEST_DIR}/Mail/inbox/19" "${MH_TEST_DIR}/Mail/inbox/20"
 
 
-run_test 'mhfixmsg 18 -normmproc'
-check "${MH_TEST_DIR}/Mail/inbox/19" \
-      "${MH_TEST_DIR}/Mail/inbox/,18" 'keep first'
+run_test 'mhfixmsg 19 -normmproc'
+check "${MH_TEST_DIR}/Mail/inbox/20" \
+      "${MH_TEST_DIR}/Mail/inbox/,19" 'keep first'
 
 
 # check -rmmproc
 
 
 # check -rmmproc
-run_test 'mhfixmsg 19 -rmmproc true'
-if test -f '${MH_TEST_DIR}/Mail/inbox/19.backup'; then
+run_test 'mhfixmsg 20 -rmmproc true'
+if test -f '${MH_TEST_DIR}/Mail/inbox/20.backup'; then
   echo check of mhfixmsg -rmmproc FAILED, should not have created backup file
   failed=`expr ${failed:-0} + 1`
 fi
   echo check of mhfixmsg -rmmproc FAILED, should not have created backup file
   failed=`expr ${failed:-0} + 1`
 fi
index 2d2fde131494cd28d01a322b8d5e6d1762f175ac..8c5268ef93680a3cfabff69f6cefc01b0515511c 100644 (file)
@@ -610,7 +610,7 @@ get_multipart_boundary (CT ct, char **part_boundary) {
             }
         }
     } else {
             }
         }
     } else {
-       status = NOTOK;
+        status = NOTOK;
     }
 
     if (status == OK) {
     }
 
     if (status == OK) {
@@ -1452,6 +1452,8 @@ decode_text_parts (CT ct, int encoding, int *message_mods) {
             if (decode_part (ct) == OK  &&  ct->c_cefile.ce_file) {
                 if ((ct_encoding = content_encoding (ct)) == CE_BINARY  &&
                     encoding != CE_BINARY) {
             if (decode_part (ct) == OK  &&  ct->c_cefile.ce_file) {
                 if ((ct_encoding = content_encoding (ct)) == CE_BINARY  &&
                     encoding != CE_BINARY) {
+                    /* The decoding isn't acceptable so discard it.
+                       Leave status as OK to allow other transformations. */
                     if (verbosw) {
                         report (ct->c_partno, ct->c_file,
                                 "will not decode%s because it is binary",
                     if (verbosw) {
                         report (ct->c_partno, ct->c_file,
                                 "will not decode%s because it is binary",
@@ -1462,9 +1464,10 @@ decode_text_parts (CT ct, int encoding, int *message_mods) {
                     unlink (ct->c_cefile.ce_file);
                     free (ct->c_cefile.ce_file);
                     ct->c_cefile.ce_file = NULL;
                     unlink (ct->c_cefile.ce_file);
                     free (ct->c_cefile.ce_file);
                     ct->c_cefile.ce_file = NULL;
-                    status = NOTOK;
-                } else if (ct->c_encoding == CE_QUOTED &&
+                } else if (ct->c_encoding == CE_QUOTED  &&
                            ct_encoding == CE_8BIT  &&  encoding == CE_7BIT) {
                            ct_encoding == CE_8BIT  &&  encoding == CE_7BIT) {
+                    /* The decoding isn't acceptable so discard it.
+                       Leave status as OK to allow other transformations. */
                     if (verbosw) {
                         report (ct->c_partno, ct->c_file,
                                 "will not decode%s because it is 8bit",
                     if (verbosw) {
                         report (ct->c_partno, ct->c_file,
                                 "will not decode%s because it is 8bit",
@@ -1475,7 +1478,6 @@ decode_text_parts (CT ct, int encoding, int *message_mods) {
                     unlink (ct->c_cefile.ce_file);
                     free (ct->c_cefile.ce_file);
                     ct->c_cefile.ce_file = NULL;
                     unlink (ct->c_cefile.ce_file);
                     free (ct->c_cefile.ce_file);
                     ct->c_cefile.ce_file = NULL;
-                    status = NOTOK;
                 } else {
                     int enc;
                     if (ct_encoding == CE_BINARY)
                 } else {
                     int enc;
                     if (ct_encoding == CE_BINARY)