Re: [PATCH 5/6] More accurately detect header lines in read_one_header_line
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:42:27
ebiederm@xmission.com (Eric W. Biederman) writes:
Only count lines of the form '^.*: ' and '^From ' as email header lines.
I am having trouble with this patch.
quoted hunk
diff --git a/mailinfo.c b/mailinfo.c index 99989c2..c642ff4 100644 --- a/mailinfo.c +++ b/mailinfo.c@@ -385,20 +385,29 @@ static int read_one_header_line(char *li { int ofs = 0; while (ofs < sz) { + const char *colon; int peek, len; if (fgets(line + ofs, sz - ofs, in) == NULL) + break; len = eatspace(line + ofs); if (len == 0) + break; + colon = strchr(line, ':'); + if (!colon || !isspace(colon[1])) { + /* Readd the newline */ + line[ofs + len] = '\n'; + line[ofs + len + 1] = '\0'; + break; }
Because eatspace() eats the trailing space, although your commit
message say lines matching "^.*: " are headers, this does not
match the criteria:
X-Spam-Checker-Version: SpamAssassin 3.1.1 (2006-03-10) on
gitster.siamese.dyndns.org
-> X-Spam-Level:
X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00
autolearn=ham version=3.1.1
Notice that the field body for this unstructured header
X-Spam-Level (an optional field) consists of a single
whitespace. It will be gone because of eatspace() when your
check sees the line, so the header parsing stops prematurely.
Was there a particular reason you needed this change? That is,
did you have to parse mail-looking input that does not have a
blank line between runs of headers and the body of the message?
If so, I'd at least like to remove the || !isspace(colon[1])
from the test. After all, I do not think RFC2822 requires a
whitespace after the colon there.