]> diplodocus.org Git - nmh/commitdiff
Added check of a header with name that's 998 bytes long to
authorDavid Levine <levinedl@acm.org>
Wed, 16 Jan 2013 04:56:33 +0000 (22:56 -0600)
committerDavid Levine <levinedl@acm.org>
Wed, 16 Jan 2013 04:56:33 +0000 (22:56 -0600)
test-header.

sbr/m_getfld.c
test/bad-input/malformed_message.txt
test/bad-input/test-header

index b5bb0a32941357441e0fb965b448dc4866939bba..82b9c3e828b03908c74cf7a40ba0379abc7cbb26 100644 (file)
@@ -428,7 +428,7 @@ m_getfld (int state, unsigned char name[NAMESZ], unsigned char *buf,
               into c prior to loop entry.  Initialize j to 1 to
               account for that. */
            for (j = 1;
-                c != ':'  &&  c != '\n'  &&  c != EOF  &&  j <= i;
+                c != ':'  &&  c != '\n'  &&  c != EOF  &&  j < i;
                 ++j, c = Getc (iob)) {
                *cp++ = c;
            }
@@ -478,9 +478,13 @@ m_getfld (int state, unsigned char name[NAMESZ], unsigned char *buf,
                *bufsz = --m.bytes_read;  /* == j - 1 */
                leave_getfld (&m, iob);
                return BODY;
-           } else if ((i -= j) <= 0) {
+           } else if (i <= j) {
+               /* By design, the loop above discards the last character
+                   it had read.  It's in c, use it. */
+               *cp++ = c;
                *bufsz = *cp = *buf = 0;
-               advise (NULL, "field name \"%s\" exceeds %d bytes", name, NAMESZ - 2);
+               advise (NULL, "field name \"%s\" exceeds %d bytes", name,
+                       NAMESZ - 2);
                state = LENERR;
                break; /* to finish */
            }
index 2d1d7c627c380e624c55ad53be7b8a879744269e..776fce10402a31313c2b28dfec1f04487050467c 100644 (file)
@@ -1,2 +1,2 @@
-Date: Sat, 12 Jan 2013 09:07:01 -0600
-Received:
\ No newline at end of file
+Date: Tue, 15 Jan 2013 21:13:12 -0600
+ThisHeaderFieldNameIsWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayTooLong: OK
index 4194b39b7a6eeeeaa525abea0a167b54216f9310..abf8c9793312745f6a8d579c057e240968645dfd 100755 (executable)
@@ -75,6 +75,7 @@ mhshow -nopause $msgnum > "$actual" 2>&1
 check "$expected" "$actual"
 
 # check m_getfld() handling of empty header field
+printf 'Date: Sat, 12 Jan 2013 09:07:01 -0600\nReceived:' >"$MH_TEST_DIR/mess"
 cat >"$expected" <<EOF
    1  01/12 
 EOF
@@ -83,8 +84,21 @@ scan: eof encountered in field "Received"
 ??Format error (message -1) in component 2
 EOF
 
-scan -width 13 -file "$thisdir"/malformed_message.txt >"$actual" 2>"$actual_err"
+scan -width 13 -file "$MH_TEST_DIR/mess" >"$actual" 2>"$actual_err"
+check "$expected" "$actual"
+check "$expected_err" "$actual_err"
+rm -f "$MH_TEST_DIR/mess"
+
+# check m_getfld() handling of excessively long header field name
+cat >"$expected" <<EOF
+   1  01/15 
+EOF
+cat >"$expected_err" <<EOF
+scan: field name "ThisHeaderFieldNameIsWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayTooLong" exceeds 997 bytes
+??Format error (message -1) in component 2
+EOF
 
+scan -width 13 -file "$thisdir"/malformed_message.txt >"$actual" 2>"$actual_err"
 check "$expected" "$actual"
 check "$expected_err" "$actual_err"