diff options
Diffstat (limited to 'mailinfo.c')
-rw-r--r-- | mailinfo.c | 36 |
1 files changed, 24 insertions, 12 deletions
diff --git a/mailinfo.c b/mailinfo.c index a489d9d0fb..bd574cb752 100644 --- a/mailinfo.c +++ b/mailinfo.c @@ -1,4 +1,5 @@ #include "cache.h" +#include "config.h" #include "utf8.h" #include "strbuf.h" #include "mailinfo.h" @@ -57,17 +58,17 @@ static void parse_bogus_from(struct mailinfo *mi, const struct strbuf *line) static const char *unquote_comment(struct strbuf *outbuf, const char *in) { int c; - int take_next_litterally = 0; + int take_next_literally = 0; strbuf_addch(outbuf, '('); while ((c = *in++) != 0) { - if (take_next_litterally == 1) { - take_next_litterally = 0; + if (take_next_literally == 1) { + take_next_literally = 0; } else { switch (c) { case '\\': - take_next_litterally = 1; + take_next_literally = 1; continue; case '(': in = unquote_comment(outbuf, in); @@ -87,15 +88,15 @@ static const char *unquote_comment(struct strbuf *outbuf, const char *in) static const char *unquote_quoted_string(struct strbuf *outbuf, const char *in) { int c; - int take_next_litterally = 0; + int take_next_literally = 0; while ((c = *in++) != 0) { - if (take_next_litterally == 1) { - take_next_litterally = 0; + if (take_next_literally == 1) { + take_next_literally = 0; } else { switch (c) { case '\\': - take_next_litterally = 1; + take_next_literally = 1; continue; case '"': return in; @@ -757,8 +758,13 @@ static int handle_commit_msg(struct mailinfo *mi, struct strbuf *line) assert(!mi->filter_stage); if (mi->header_stage) { - if (!line->len || (line->len == 1 && line->buf[0] == '\n')) + if (!line->len || (line->len == 1 && line->buf[0] == '\n')) { + if (mi->inbody_header_accum.len) { + flush_inbody_header_accum(mi); + mi->header_stage = 0; + } return 0; + } } if (mi->use_inbody_headers && mi->header_stage) { @@ -877,7 +883,10 @@ static int read_one_header_line(struct strbuf *line, FILE *in) for (;;) { int peek; - peek = fgetc(in); ungetc(peek, in); + peek = fgetc(in); + if (peek == EOF) + break; + ungetc(peek, in); if (peek != ' ' && peek != '\t') break; if (strbuf_getline_lf(&continuation, in)) @@ -911,8 +920,7 @@ again: /* we hit an end boundary */ /* pop the current boundary off the stack */ strbuf_release(*(mi->content_top)); - free(*(mi->content_top)); - *(mi->content_top) = NULL; + FREE_AND_NULL(*(mi->content_top)); /* technically won't happen as is_multipart_boundary() will fail first. But just in case.. @@ -1094,6 +1102,10 @@ int mailinfo(struct mailinfo *mi, const char *msg, const char *patch) do { peek = fgetc(mi->input); + if (peek == EOF) { + fclose(cmitmsg); + return error("empty patch: '%s'", patch); + } } while (isspace(peek)); ungetc(peek, mi->input); |