Browse Source

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>
maint
Junio C Hamano 19 years ago
parent
commit
ae448e3854
  1. 22
      mailinfo.c

22
mailinfo.c

@ -243,11 +243,20 @@ static int eatspace(char *line)
#define SEEN_BOGUS_UNIX_FROM 010 #define SEEN_BOGUS_UNIX_FROM 010
#define SEEN_PREFIX 020 #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) static void handle_inbody_header(int *seen, char *line)
{ {
if (*seen & SEEN_PREFIX) if (*seen & SEEN_PREFIX)
return; 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 (!memcmp(">From", line, 5) && isspace(line[5])) {
if (!(*seen & SEEN_BOGUS_UNIX_FROM)) { if (!(*seen & SEEN_BOGUS_UNIX_FROM)) {
*seen |= SEEN_BOGUS_UNIX_FROM; *seen |= SEEN_BOGUS_UNIX_FROM;
@ -316,6 +325,7 @@ static char *cleanup_subject(char *subject)
} }
break; break;
} }
eatspace(subject);
return 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) if (fgets(line + ofs, sz - ofs, in) == NULL)
break; break;
len = eatspace(line + ofs); len = eatspace(line + ofs);
if (len == 0) if ((len == 0) || !is_rfc2822_header(line)) {
break;
if (!is_rfc2822_header(line)) {
/* Re-add the newline */ /* Re-add the newline */
line[ofs + len] = '\n'; line[ofs + len] = '\n';
line[ofs + len + 1] = '\0'; line[ofs + len + 1] = '\0';
@ -764,10 +772,8 @@ static void handle_body(void)
{ {
int seen = 0; int seen = 0;


if (line[0] || fgets(line, sizeof(line), stdin) != NULL) { handle_commit_msg(&seen);
handle_commit_msg(&seen); handle_patch();
handle_patch();
}
fclose(patchfile); fclose(patchfile);
if (!patch_lines) { if (!patch_lines) {
fprintf(stderr, "No patch found\n"); fprintf(stderr, "No patch found\n");

Loading…
Cancel
Save