nmh-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Nmh-commits] nmh ChangeLog sbr/m_getfld.c test/tests/bad-inp...


From: Eric Gillespie
Subject: [Nmh-commits] nmh ChangeLog sbr/m_getfld.c test/tests/bad-inp...
Date: Wed, 13 Aug 2008 18:27:37 +0000

CVSROOT:        /sources/nmh
Module name:    nmh
Changes by:     Eric Gillespie <epg>    08/08/13 18:27:37

Modified files:
        .              : ChangeLog 
        sbr            : m_getfld.c 
Added files:
        test/tests/bad-input: test-header 

Log message:
                * test/tests/bad-input/test-header: Add test for it.
        
                * sbr/m_getfld.c: If we reach the end of the line without 
finding
                a ':' when parsing a header field, treat that line as the
                beginning of the body rather than blowing up.  These messages 
are
                usually spam, but it's nice to be able to at least scan them.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/nmh/ChangeLog?cvsroot=nmh&r1=1.289&r2=1.290
http://cvs.savannah.gnu.org/viewcvs/nmh/sbr/m_getfld.c?cvsroot=nmh&r1=1.14&r2=1.15
http://cvs.savannah.gnu.org/viewcvs/nmh/test/tests/bad-input/test-header?cvsroot=nmh&rev=1.1

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/nmh/nmh/ChangeLog,v
retrieving revision 1.289
retrieving revision 1.290
diff -u -b -r1.289 -r1.290
--- ChangeLog   13 Aug 2008 01:01:12 -0000      1.289
+++ ChangeLog   13 Aug 2008 18:27:36 -0000      1.290
@@ -1,3 +1,12 @@
+2008-08-13  Eric Gillespie  <address@hidden>
+
+       * test/tests/bad-input/test-header: Add test for it.
+
+       * sbr/m_getfld.c: If we reach the end of the line without finding
+       a ':' when parsing a header field, treat that line as the
+       beginning of the body rather than blowing up.  These messages are
+       usually spam, but it's nice to be able to at least scan them.
+
 2008-08-12  Eric Gillespie  <address@hidden>
 
        * test/tests/mhshow/test-qp: Test various valid and invalid

Index: sbr/m_getfld.c
===================================================================
RCS file: /sources/nmh/nmh/sbr/m_getfld.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -b -r1.14 -r1.15
--- sbr/m_getfld.c      8 Aug 2008 23:45:24 -0000       1.14
+++ sbr/m_getfld.c      13 Aug 2008 18:27:37 -0000      1.15
@@ -2,7 +2,7 @@
 /*
  * m_getfld.c -- read/parse a message
  *
- * $Id: m_getfld.c,v 1.14 2008/08/08 23:45:24 epg Exp $
+ * $Id: m_getfld.c,v 1.15 2008/08/13 18:27:37 epg Exp $
  *
  * This code is Copyright (c) 2002, by the authors of nmh.  See the
  * COPYRIGHT file in the root directory of the nmh distribution for
@@ -314,11 +314,36 @@
                 *  . hit the end of the buffer. (loop)
                 */
                if (c == '\n') {
+                   /* We hit the end of the line without seeing ':' to
+                    * terminate the field name.  This is usually (always?)
+                    * spam.  But, blowing up is lame, especially when
+                    * scan(1)ing a folder with such messages.  Pretend such
+                    * lines are the first of the body (at least mutt also
+                    * handles it this way). */
+
+                   /* See if buf can hold this line, since we were assuming
+                    * we had a buffer of NAMESZ, not bufsz. */
+                   /* + 1 for the newline */
+                   if (bufsz < j + 1) {
+                       /* No, it can't.  Oh well, guess we'll blow up. */
                    *cp = *buf = 0;
                    advise (NULL, "eol encountered in field \"%s\"", name);
                    state = FMTERR;
                    goto finish;
                }
+                   memcpy (buf, name, j - 1);
+                   buf[j - 1] = '\n';
+                   buf[j] = '\0';
+                   /* mhparse.c:get_content wants to find the position of the
+                    * body start, but it thinks there's a blank line between
+                    * the header and the body (naturally!), so seek back so
+                    * that things line up even though we don't have that
+                    * blank line in this case.  Simpler parsers (e.g. mhl)
+                    * get extra newlines, but that should be harmless enough,
+                    * right?  This is a corrupt message anyway. */
+                   fseek (iob, ftell (iob) - 2, SEEK_SET);
+                   return BODY;
+               }
                if ((i -= j) <= 0) {
                    *cp = *buf = 0;
                    advise (NULL, "field name \"%s\" exceeds %d bytes", name, 
NAMESZ - 1);

Index: test/tests/bad-input/test-header
===================================================================
RCS file: test/tests/bad-input/test-header
diff -N test/tests/bad-input/test-header
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ test/tests/bad-input/test-header    13 Aug 2008 18:27:37 -0000      1.1
@@ -0,0 +1,68 @@
+#!/bin/sh
+
+# 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
+}
+
+expected=$MH_TEST_DIR/$$.expected
+actual=$MH_TEST_DIR/$$.actual
+
+# Write message with bogus header field (missing blank line, really).
+msgfile=$(mhpath new)
+msgnum=$(basename $msgfile)
+cat > $msgfile <<EOF
+Date: Sun, 18 Dec 2005 00:52:39 +0100
+From: address@hidden
+To: address@hidden
+Subject: test
+This is a multi-part message in MIME format.
+
+I am a stupid spammer.
+EOF
+
+# check scan
+cat > $expected <<EOF
+  11  12/18 address@hidden    test<<This is a multi-part message in MIME forma
+EOF
+scan $msgnum > $actual 2>&1
+check
+
+# check show (mhl)
+cat > $expected <<EOF
+(Message inbox:11)
+
+Date:    Sun, 18 Dec 2005 00:52:39 +0100
+To:      address@hidden
+From:    address@hidden
+Subject: test
+
+
+This is a multi-part message in MIME format.
+
+
+I am a stupid spammer.
+EOF
+show $msgnum > $actual 2>&1
+check
+
+# check mhshow
+cat > $expected <<EOF
+Date:    Sun, 18 Dec 2005 00:52:39 +0100
+To:      address@hidden
+From:    address@hidden
+Subject: test
+
+
+part       text/plain                  70
+
+This is a multi-part message in MIME format.
+
+I am a stupid spammer.
+EOF
+mhshow -nopause $msgnum > $actual 2>&1
+check




reply via email to

[Prev in Thread] Current Thread [Next in Thread]