aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTaylor Blau <me@ttaylorr.com>2024-10-18 13:56:24 -0400
committerTaylor Blau <me@ttaylorr.com>2024-10-18 13:56:24 -0400
commit728ae63c05398a9489797353d195dde874c074db (patch)
tree18b80400159e5934ec8e2396ec452fe1da88e992
parent645cc7a2a7274a92403d2848ef643a96f1589d09 (diff)
parent6dab49b9fbbb63a5f58a3cc6e2295f01b1f628f0 (diff)
downloadgit-728ae63c05398a9489797353d195dde874c074db.tar.gz
Merge branch 'tc/bundle-uri-leakfix'
Leakfix. * tc/bundle-uri-leakfix: bundle-uri: plug leak in unbundle_from_file()
-rw-r--r--bundle-uri.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/bundle-uri.c b/bundle-uri.c
index 4b1a2e2937..0df66e2872 100644
--- a/bundle-uri.c
+++ b/bundle-uri.c
@@ -368,17 +368,23 @@ static int unbundle_from_file(struct repository *r, const char *file)
struct strbuf bundle_ref = STRBUF_INIT;
size_t bundle_prefix_len;
- if ((bundle_fd = read_bundle_header(file, &header)) < 0)
- return 1;
+ bundle_fd = read_bundle_header(file, &header);
+ if (bundle_fd < 0) {
+ result = 1;
+ goto cleanup;
+ }
/*
* Skip the reachability walk here, since we will be adding
* a reachable ref pointing to the new tips, which will reach
* the prerequisite commits.
*/
- if ((result = unbundle(r, &header, bundle_fd, NULL,
- VERIFY_BUNDLE_QUIET | (fetch_pack_fsck_objects() ? VERIFY_BUNDLE_FSCK : 0))))
- return 1;
+ result = unbundle(r, &header, bundle_fd, NULL,
+ VERIFY_BUNDLE_QUIET | (fetch_pack_fsck_objects() ? VERIFY_BUNDLE_FSCK : 0));
+ if (result) {
+ result = 1;
+ goto cleanup;
+ }
/*
* Convert all refs/heads/ from the bundle into refs/bundles/
@@ -407,6 +413,8 @@ static int unbundle_from_file(struct repository *r, const char *file)
0, UPDATE_REFS_MSG_ON_ERR);
}
+cleanup:
+ strbuf_release(&bundle_ref);
bundle_header_release(&header);
return result;
}