From: Jeff King Date: Thu, 12 May 2016 04:47:30 GMT Subject: Re: [PATCH 2/2] am: plug FILE * leak in split_mail_conv() Message-ID: <20160512044730.GA5436@sigill.intra.peff.net> In-Reply-To: <20160511233546.13090-2-gitster@pobox.com> On Wed, May 11, 2016 at 04:35:46PM -0700, Junio C Hamano wrote: > Signed-off-by: Junio C Hamano > --- > builtin/am.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/builtin/am.c b/builtin/am.c > index f1a84c6..a373928 100644 > --- a/builtin/am.c > +++ b/builtin/am.c > @@ -761,9 +761,11 @@ static int split_mail_conv(mail_conv_fn fn, struct am_state *state, > mail = mkpath("%s/%0*d", state->dir, state->prec, i + 1); > > out = fopen(mail, "w"); > - if (!out) > + if (!out) { > + fclose(in); > return error(_("could not open '%s' for writing: %s"), > mail, strerror(errno)); > + } Presumably `fclose` doesn't ever overwrite errno in practice, but I guess it could in theory. I also found it weird that we might fclose(stdin) via this line, but that matches what happens in the non-error path, so I guess it's OK? -Peff