Re: [PATCH 2/2] am: plug FILE * leak in split_mail_conv()
Jeff King <peff@peff.net> wrote:
Show 15 quoted lines
> On Wed, May 11, 2016 at 04:35:46PM -0700, Junio C Hamano wrote:
> > +++ 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 think both patches in this series would benefit from capturing errno before cleanup. `fclose` can call `free`, and `free` could do any manner of things such as calling `madvise` with a flag not implemented in the running kernel, or failing an optional trylock without being fatal.
There's lots of non-standard malloc implementations out there :)
So I'm not sure if there's ever a guarantee that a non-error function call preserves `errno`.