From f30b20282babcd77bcadef70b4e36e24cd1f6d59 Mon Sep 17 00:00:00 2001 From: "Eric W. Biederman" Date: Tue, 23 May 2006 13:53:20 -0600 Subject: [PATCH] More accurately detect header lines in read_one_header_line Only count lines of the form '^.*: ' and '^From ' as email header lines. Signed-off-by: Eric W. Biederman Signed-off-by: Junio C Hamano --- mailinfo.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/mailinfo.c b/mailinfo.c index 99989c25..a2b15e26 100644 --- a/mailinfo.c +++ b/mailinfo.c @@ -385,20 +385,29 @@ static int read_one_header_line(char *line, int sz, FILE *in) { int ofs = 0; while (ofs < sz) { + const char *colon; int peek, len; if (fgets(line + ofs, sz - ofs, in) == NULL) - return ofs; + break; len = eatspace(line + ofs); if (len == 0) - return ofs; - peek = fgetc(in); ungetc(peek, in); - if (peek == ' ' || peek == '\t') { - /* Yuck, 2822 header "folding" */ - ofs += len; - continue; + break; + colon = strchr(line, ':'); + if (!colon || !isspace(colon[1])) { + /* Re-add the newline */ + line[ofs + len] = '\n'; + line[ofs + len + 1] = '\0'; + break; } - return ofs + len; + ofs += len; + /* Yuck, 2822 header "folding" */ + peek = fgetc(in); ungetc(peek, in); + if (peek != ' ' && peek != '\t') + break; } + /* Count mbox From headers as headers */ + if (!ofs && !memcmp(line, "From ", 5)) + ofs = 1; return ofs; } -- 2.11.0