[PATCH 5/6] More accurately detect header lines in read_one_header_line
- From
Eric W. Biederman <ebiederm@xmission.com>
- Date
- May 23, 2006, 19:53 UTC
- Message-ID
- <m1mzd8iklr.fsf_-_@ebiederm.dsl.xmission.com>
- In-Reply-To
- <m1r72kiksz.fsf_-_@ebiederm.dsl.xmission.com>
Only count lines of the form '^.*: ' and '^From ' as email header lines.
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
---
mailinfo.c | 25 +++++++++++++++++-------- 1 files changed, 17 insertions(+), 8 deletions(-)
b955444f0bfb4ee9a5cd31686dd7eeec0750e235
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) - 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])) { + /* Readd 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; }
-- 1.3.2.g5041c-dirty