diff options
author | Tay Ray Chuan <rctay89@gmail.com> | 2011-10-07 15:40:22 +0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2011-10-07 16:15:02 -0700 |
commit | 9516a598e3ecf39667a35ab2c5aa6cf88e9f7717 (patch) | |
tree | 9104d390fa0c955eaccdf67d9da0e277bc6f4482 | |
parent | fetch: verify we have everything we need before updating our ref (diff) | |
download | tgif-9516a598e3ecf39667a35ab2c5aa6cf88e9f7717.tar.xz |
fetch: plug two leaks on error exit in store_updated_refs
Close FETCH_HEAD and release the string url even if we have to leave the
function store_updated_refs() early.
Reported-by: Chris Wilson <cwilson@vigilantsw.com>
Helped-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | builtin/fetch.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/builtin/fetch.c b/builtin/fetch.c index bdb03ff54c..db2c5d905b 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -423,8 +423,10 @@ static int store_updated_refs(const char *raw_url, const char *remote_name, else url = xstrdup("foreign"); - if (check_everything_connected(ref_map, 0)) - return error(_("%s did not send all necessary objects\n"), url); + if (check_everything_connected(ref_map, 0)) { + rc = error(_("%s did not send all necessary objects\n"), url); + goto abort; + } for (rm = ref_map; rm; rm = rm->next) { struct ref *ref = NULL; @@ -506,12 +508,15 @@ static int store_updated_refs(const char *raw_url, const char *remote_name, fprintf(stderr, " %s\n", note); } } - free(url); - fclose(fp); + if (rc & STORE_REF_ERROR_DF_CONFLICT) error(_("some local refs could not be updated; try running\n" " 'git remote prune %s' to remove any old, conflicting " "branches"), remote_name); + + abort: + free(url); + fclose(fp); return rc; } |