Rework in the test framework; updated and new tests
[mmh] / test / tests / bad-input / test-header
index 8a3251e..6b826a0 100644 (file)
@@ -1,25 +1,18 @@
 #!/bin/sh
 ######################################################
 #
-# Test bogus headers (no blank line before body).
+# Test bogus headers (no blank line before body, etc.)
 #
 ######################################################
 
-# TODO: Move to a common file tests can source; need more framework...
-failed=0
-check() {
-    diff -u $expected $actual
-    if [ $? -ne 0 ]; then
-        failed=$((failed + 1))
-    fi
-}
+. "$MH_TEST_COMMON"
 
 expected=$MH_TEST_DIR/$$.expected
-actual=$MH_TEST_DIR/$$.actual
 
 # Write message with bogus header field (missing blank line, really).
-msgfile=$(mhpath b)
-msgnum=$(basename $msgfile)
+msgfile="$(mhpath b)"
+msgnum="$(basename $msgfile)"
+
 cat > $msgfile <<EOF
 Date: Sun, 18 Dec 2005 00:52:39 +0100
 From: foo@example.edu
@@ -30,16 +23,15 @@ This is a multi-part message in MIME format.
 I am a stupid spammer.
 EOF
 
+
 # check scan
-cat > $expected <<EOF
+runandcheck "scan $msgnum" <<!
   11  2005-12-18 00:52  foo@example.edu    test
-EOF
-scan $msgnum > $actual 2>&1
-check
+!
 
 
 # check show
-cat > $expected <<EOF
+runandcheck "show $msgnum" <<!
 Date:    Sun, 18 Dec 2005 00:52:39 +0100
 From:    foo@example.edu
 To:      bar@example.edu
@@ -50,8 +42,69 @@ part       text/plain                  70
 This is a multi-part message in MIME format.
 
 I am a stupid spammer.
+!
+
+
+
+# check m_getfld() handling of empty header field
+msgfile="`mhpath b`"
+printf 'Date: Sat, 12 Jan 2013 09:07:01 -0600\nReceived:' >"$msgfile"
+runandcheck "scan l" <<!
+scan: eof encountered in field "Received"
+??Format error (message 12) in component 2
+  12  2013-01-12 09:07                     
+!
+
+
+
+# check m_getfld() handling of excessively long header field name
+
+msgfile="$MH_TEST_DIR/Mail/inbox/13"
+cat >"$msgfile" <<EOF
+Date: Tue, 15 Jan 2013 21:13:12 -0600
+ThisHeaderFieldNameIsWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayTooLong: OK
 EOF
-show $msgnum > $actual 2>&1
-check
+runandcheck "scan l" <<!
+scan: field name "ThisHeaderFieldNameIsWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayTooLong" exceeds 997 bytes
+??Format error (message 13) in component 2
+  13  2013-01-15 21:13                     
+!
+
+
+
+# # Cygwin has a BUFSIZ of 1024 so the error message gets truncated.
+# # Deal with that by grepping to verify that scan showed the proper error.
+# verify_string_in_file() {
+#   if grep "$1" "$2" >/dev/null; then
+#     :
+#   else
+#     echo "$0: did not receive expected error message \"$1\""
+#     failed=`expr ${failed:-0} + 1`
+#   fi
+# }
+# verify_string_in_file 'scan: field name "ThisHeaderFieldNameIsWa' "$actual_err"
+# verify_string_in_file 'exceeds 997' "$actual_err"
+# verify_string_in_file '??Format error (message 13) in component 2' "$actual_err"
+# rm -f "$actual_err"
+
+
+
+
+# check m_getfld() handling of long header field name without a colon
+
+msgfile="$MH_TEST_DIR/Mail/inbox/14"
+cat >"$msgfile" <<EOF
+Date: Thu, 17 Jan 2013 19:33:46 -0600
+If a header field name has at least 512 characters without a newline or colon, it will raise a format error in m_getfld().  Here is a test of that.  01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901
+
+Test
+
+
+EOF
+
+runandcheck "scan l" <<!
+scan: eol encountered in field "If a header field name has at least 512 characters without a newline or colon, it will raise a format error in m_getfld().  Here is a test of that.  01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901"
+??Format error (message 14) in component 2
+  14  2013-01-17 19:33                     
+!
 
-exit $failed