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 <ebiederm@xmission.com> Signed-off-by: Junio C Hamano <junkio@cox.net>maint
parent
1f36bee67e
commit
f30b20282b
25
mailinfo.c
25
mailinfo.c
|
@ -385,20 +385,29 @@ static int read_one_header_line(char *line, int sz, FILE *in)
|
||||||
{
|
{
|
||||||
int ofs = 0;
|
int ofs = 0;
|
||||||
while (ofs < sz) {
|
while (ofs < sz) {
|
||||||
|
const char *colon;
|
||||||
int peek, len;
|
int peek, len;
|
||||||
if (fgets(line + ofs, sz - ofs, in) == NULL)
|
if (fgets(line + ofs, sz - ofs, in) == NULL)
|
||||||
return ofs;
|
break;
|
||||||
len = eatspace(line + ofs);
|
len = eatspace(line + ofs);
|
||||||
if (len == 0)
|
if (len == 0)
|
||||||
return ofs;
|
break;
|
||||||
peek = fgetc(in); ungetc(peek, in);
|
colon = strchr(line, ':');
|
||||||
if (peek == ' ' || peek == '\t') {
|
if (!colon || !isspace(colon[1])) {
|
||||||
/* Yuck, 2822 header "folding" */
|
/* Re-add the newline */
|
||||||
ofs += len;
|
line[ofs + len] = '\n';
|
||||||
continue;
|
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;
|
return ofs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue