summaryrefslogtreecommitdiff
path: root/bundle.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2016-04-13 21:12:34 (GMT)
committerJunio C Hamano <gitster@pobox.com>2016-04-13 21:12:34 (GMT)
commitfc452aeac2d5d357de2904aebee8d3867f92705c (patch)
treeeddb9131bf8f3abba7be345e77b61624b8106ea8 /bundle.c
parent5250af49f03b5f2da96770523f69d7584693b553 (diff)
parent9c60d9faab43f73166d4cebb7c86b1bbf8d8df4b (diff)
downloadgit-fc452aeac2d5d357de2904aebee8d3867f92705c.zip
git-fc452aeac2d5d357de2904aebee8d3867f92705c.tar.gz
git-fc452aeac2d5d357de2904aebee8d3867f92705c.tar.bz2
Merge branch 'sb/misc-cleanups'
Assorted minor clean-ups. * sb/misc-cleanups: credential-cache, send_request: close fd when done bundle: don't leak an fd in case of early return abbrev_sha1_in_line: don't leak memory notes: don't leak memory in git_config_get_notes_strategy
Diffstat (limited to 'bundle.c')
-rw-r--r--bundle.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/bundle.c b/bundle.c
index 506ac49..bbf4efa 100644
--- a/bundle.c
+++ b/bundle.c
@@ -435,12 +435,14 @@ int create_bundle(struct bundle_header *header, const char *path,
/* write prerequisites */
if (compute_and_write_prerequisites(bundle_fd, &revs, argc, argv))
- return -1;
+ goto err;
argc = setup_revisions(argc, argv, &revs, NULL);
- if (argc > 1)
- return error(_("unrecognized argument: %s"), argv[1]);
+ if (argc > 1) {
+ error(_("unrecognized argument: %s"), argv[1]);
+ goto err;
+ }
object_array_remove_duplicates(&revs.pending);
@@ -448,17 +450,26 @@ int create_bundle(struct bundle_header *header, const char *path,
if (!ref_count)
die(_("Refusing to create empty bundle."));
else if (ref_count < 0)
- return -1;
+ goto err;
/* write pack */
- if (write_pack_data(bundle_fd, &revs))
- return -1;
+ if (write_pack_data(bundle_fd, &revs)) {
+ bundle_fd = -1; /* already closed by the above call */
+ goto err;
+ }
if (!bundle_to_stdout) {
if (commit_lock_file(&lock))
die_errno(_("cannot create '%s'"), path);
}
return 0;
+err:
+ if (!bundle_to_stdout) {
+ if (0 <= bundle_fd)
+ close(bundle_fd);
+ rollback_lock_file(&lock);
+ }
+ return -1;
}
int unbundle(struct bundle_header *header, int bundle_fd, int flags)