Re: [PATCH 17/34] mailinfo: release strbuf on error return in handle_boundary()
- From
- Martin Ågren <martin.agren@gmail.com>
- Date
- Aug 30, 2017, 18:23 UTC
- Message-ID
- <CAN0heSopzQdkO373_eTHM8=z9fAWJFhyo6a5tVPWW-j8p0V2xA@mail.gmail.com>
- In-Reply-To
- <20170830175005.20756-18-l.s.r@web.de>
On 30 August 2017 at 19:49, Rene Scharfe <l.s.r@web.de> wrote:
Show 33 quoted lines
> Signed-off-by: Rene Scharfe <l.s.r@web.de>
> ---
> 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?