On 30 August 2017 at 19:49, Rene Scharfe <l.s.r@xxxxxx> wrote: > Signed-off-by: Rene Scharfe <l.s.r@xxxxxx> > --- > mailinfo.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/mailinfo.c b/mailinfo.c > index b1f5159546..f2387a3267 100644 > --- a/mailinfo.c > +++ b/mailinfo.c > @@ -911,48 +911,49 @@ static int find_boundary(struct mailinfo *mi, struct strbuf *line) > static int handle_boundary(struct mailinfo *mi, struct strbuf *line) > { > struct strbuf newline = STRBUF_INIT; > > strbuf_addch(&newline, '\n'); > again: > if (line->len >= (*(mi->content_top))->len + 2 && > !memcmp(line->buf + (*(mi->content_top))->len, "--", 2)) { > /* we hit an end boundary */ > /* pop the current boundary off the stack */ > strbuf_release(*(mi->content_top)); > FREE_AND_NULL(*(mi->content_top)); > > /* technically won't happen as is_multipart_boundary() > will fail first. But just in case.. > */ > if (--mi->content_top < mi->content) { > error("Detected mismatched boundaries, can't recover"); > mi->input_error = -1; > mi->content_top = mi->content; > + strbuf_release(&newline); > return 0; > } Since this code path can't be taken (or so it says): How did you find this and the others? Static analysis? Grepping around?