git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 2/2] am: plug FILE * leak in split_mail_conv()

From
EWEric Wong <e@80x24.org>
Date
May 12, 2016, 07:59 UTC
Message-ID
<20160512075939.GA31343@dcvr.yhbt.net>
In-Reply-To
<20160512044730.GA5436@sigill.intra.peff.net>
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`.

Previous: Jeff KingNext: Jeff King
Message 6 of 8 in “am: plug small memory leak when split_mail_stgit_series() fails”
  1. 1/2 am: plug small memory leak when split_mail_stgit_series() failsJunio C Hamano, May 11, 2016
  2. 2/2 am: plug FILE * leak in split_mail_conv()Junio C Hamano, May 11, 2016
  3. Jeff KingMay 12, 2016
  4. Mikael MagnussonMay 12, 2016
  5. Jeff KingMay 12, 2016
  6. Eric WongMay 12, 2016
  7. Jeff KingMay 12, 2016
  8. Junio C HamanoMay 12, 2016

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.