#include "cache.h"
+#include "config.h"
#include "utf8.h"
#include "strbuf.h"
#include "mailinfo.h"
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);
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;
at = strchr(f.buf, '@');
if (!at) {
parse_bogus_from(mi, from);
- return;
+ goto out;
}
/*
* If we already have one email, don't take any confusing lines
*/
- if (mi->email.len && strchr(at + 1, '@')) {
- strbuf_release(&f);
- return;
- }
+ if (mi->email.len && strchr(at + 1, '@'))
+ goto out;
/* Pick up the string around '@', possibly delimited with <>
* pair; that is the email part.
}
get_sane_name(&mi->name, &f, &mi->email);
+out:
strbuf_release(&f);
}
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) {
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))
/* 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..
error("Detected mismatched boundaries, can't recover");
mi->input_error = -1;
mi->content_top = mi->content;
+ strbuf_release(&newline);
return 0;
}
handle_filter(mi, &newline);
do {
peek = fgetc(mi->input);
+ if (peek == EOF) {
+ fclose(cmitmsg);
+ return error("empty patch: '%s'", patch);
+ }
} while (isspace(peek));
ungetc(peek, mi->input);