diff options
author | Junio C Hamano <junkio@cox.net> | 2006-06-17 16:58:51 -0700 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-06-17 17:05:36 -0700 |
commit | ae448e3854d8b6e7e37aa88fa3917f5dd97f3210 (patch) | |
tree | 6ea110e630b8d2ab6168888de52fbf2c1c706b2c /mailinfo.c | |
parent | Don't parse any headers in the real body of an email message. (diff) | |
download | tgif-ae448e3854d8b6e7e37aa88fa3917f5dd97f3210.tar.xz |
mailinfo: ignore blanks after in-body headers.
[jc: this is based on Eric's patch but also fixes up the parsed
subject headers].
Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'mailinfo.c')
-rw-r--r-- | mailinfo.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/mailinfo.c b/mailinfo.c index 0ccd490082..d9b74f30de 100644 --- a/mailinfo.c +++ b/mailinfo.c @@ -243,11 +243,20 @@ static int eatspace(char *line) #define SEEN_BOGUS_UNIX_FROM 010 #define SEEN_PREFIX 020 -/* First lines of body can have From:, Date:, and Subject: */ +/* First lines of body can have From:, Date:, and Subject: or empty */ static void handle_inbody_header(int *seen, char *line) { if (*seen & SEEN_PREFIX) return; + if (isspace(*line)) { + char *cp; + for (cp = line + 1; *cp; cp++) { + if (!isspace(*cp)) + break; + } + if (!*cp) + return; + } if (!memcmp(">From", line, 5) && isspace(line[5])) { if (!(*seen & SEEN_BOGUS_UNIX_FROM)) { *seen |= SEEN_BOGUS_UNIX_FROM; @@ -316,6 +325,7 @@ static char *cleanup_subject(char *subject) } break; } + eatspace(subject); return subject; } } @@ -422,9 +432,7 @@ static int read_one_header_line(char *line, int sz, FILE *in) if (fgets(line + ofs, sz - ofs, in) == NULL) break; len = eatspace(line + ofs); - if (len == 0) - break; - if (!is_rfc2822_header(line)) { + if ((len == 0) || !is_rfc2822_header(line)) { /* Re-add the newline */ line[ofs + len] = '\n'; line[ofs + len + 1] = '\0'; @@ -764,10 +772,8 @@ static void handle_body(void) { int seen = 0; - if (line[0] || fgets(line, sizeof(line), stdin) != NULL) { - handle_commit_msg(&seen); - handle_patch(); - } + handle_commit_msg(&seen); + handle_patch(); fclose(patchfile); if (!patch_lines) { fprintf(stderr, "No patch found\n"); |