This is a fix for a regression introduced in: 8b4525fb3c6d79bd3a64b8f441237a4095db4e22. When I refactored the inbody header parsing into a state machine I failed to see the logic that skipped multiple leading spaces if they are present. I think I assumed that logic was just there to skip the initial blank line between the mail headers and the body. This restores that behaviour and since we ignore all leading blank lines in commit messages now this code removes the special case for the blank line between the mail headers and the body. --- mailinfo.c | 24 ++++++++++++++++-------- 1 files changed, 16 insertions(+), 8 deletions(-) diff --git a/mailinfo.c b/mailinfo.c index 5b6c215..3696d61 100644 --- a/mailinfo.c +++ b/mailinfo.c @@ -229,6 +229,14 @@ static int is_multipart_boundary(const c return (!memcmp(line, multipart_boundary, multipart_boundary_len)); } +static int is_blank(char *line) +{ + char *ch; + for (ch = line; isspace(*ch); ch++) + ; + return *ch == '\0'; +} + static int eatspace(char *line) { int len = strlen(line); @@ -243,7 +251,7 @@ #define SEEN_SUBJECT 04 #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 be blank */ static void handle_inbody_header(int *seen, char *line) { if (!memcmp(">From", line, 5) && isspace(line[5])) { @@ -279,6 +287,10 @@ static void handle_inbody_header(int *se return; } } + if (isspace(line[0])) { + if (!(*seen & SEEN_PREFIX) && is_blank(line)) + return; + } *seen |= SEEN_PREFIX; } @@ -420,9 +432,7 @@ static int read_one_header_line(char *li 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'; @@ -762,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"); -- 1.4.0.rc2.g5e3a6 - : send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html