[Top][All Lists]
[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Nmh-commits] nmh ChangeLog sbr/m_getfld.c test/tests/bad-inp...,
Eric Gillespie <=