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

Re: [PATCH 5/6] bundle: don't leak an fd in case of early return

From
Jeff King <peff@peff.net>
Date
Mar 30, 2016, 01:17 UTC
Message-ID
<20160330011743.GD2237@sigill.intra.peff.net>
In-Reply-To
<1459298333-21899-6-git-send-email-sbeller@google.com>
On Tue, Mar 29, 2016 at 05:38:52PM -0700, Stefan Beller wrote:
Show 23 quoted lines
> In successful operation `write_pack_data` will close the `bundle_fd`,
> but when we exit early, we need to take care of the file descriptor
> ourselves.
> 
> Signed-off-by: Stefan Beller <sbeller@google.com>
> ---
>  bundle.c | 10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)
> 
> diff --git a/bundle.c b/bundle.c
> index 506ac49..04d62af 100644
> --- a/bundle.c
> +++ b/bundle.c
> @@ -434,8 +434,11 @@ int create_bundle(struct bundle_header *header, const char *path,
>  	init_revisions(&revs, NULL);
>  
>  	/* write prerequisites */
> -	if (compute_and_write_prerequisites(bundle_fd, &revs, argc, argv))
> +	if (compute_and_write_prerequisites(bundle_fd, &revs, argc, argv)) {
> +		if (!bundle_to_stdout)
> +			close(bundle_fd);
>  		return -1;
> +	}

Makes sense. Should we also be rolling back the lock file? It happens automatically at program exit, of course, but we are in library code here that should not rely on that.

Show 10 quoted lines
> @@ -447,8 +450,11 @@ int create_bundle(struct bundle_header *header, const char *path,
>  	ref_count = write_bundle_refs(bundle_fd, &revs);
>  	if (!ref_count)
>  		die(_("Refusing to create empty bundle."));
> -	else if (ref_count < 0)
> +	else if (ref_count < 0) {
> +		if (!bundle_to_stdout)
> +			close(bundle_fd);
>  		return -1;
> +	}

Ditto here, and in the error return from write_pack_data(). There are enough spots that it may be worth setting up a "goto err" path.

-Peff
Previous: Stefan BellerNext: Junio C Hamano
Message 21 of 24 in “Some cleanups”
  1. 0/6 Some cleanupsStefan Beller, Mar 30, 2016
  2. 1/6 path.c: allocate enough memory for stringStefan Beller, Mar 30, 2016
  3. Junio C HamanoMar 30, 2016
  4. Eric SunshineMar 30, 2016
  5. Stefan BellerMar 30, 2016
  6. Junio C HamanoMar 30, 2016
  7. 2/6 imap-send.c, cram: allocate enough memory for null terminated stringStefan Beller, Mar 30, 2016
  8. Eric SunshineMar 30, 2016
  9. Jeff KingMar 30, 2016
  10. 3/6 notes: don't leak memory in git_config_get_notes_strategyStefan Beller, Mar 30, 2016
  11. Eric SunshineMar 30, 2016
  12. Jeff KingMar 30, 2016
  13. Junio C HamanoMar 30, 2016
  14. 4/6 abbrev_sha1_in_line: don't leak memoryStefan Beller, Mar 30, 2016
  15. Jeff KingMar 30, 2016
  16. Eric SunshineMar 30, 2016
  17. Jeff KingMar 30, 2016
  18. Junio C HamanoMar 30, 2016
  19. Jeff KingMar 30, 2016
  20. 5/6 bundle: don't leak an fd in case of early returnStefan Beller, Mar 30, 2016
  21. Jeff KingMar 30, 2016
  22. Junio C HamanoMar 30, 2016
  23. 6/6 credential-cache, send_request: close fd when doneStefan Beller, Mar 30, 2016
  24. Jeff KingMar 30, 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.