diff options
author | Ævar Arnfjörð Bjarmason <avarab@gmail.com> | 2023-02-07 00:07:37 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2023-02-07 00:34:36 +0100 |
commit | 53537c6c17737010b7090634257b6274347bdbc8 (patch) | |
tree | 3a3727547d6c9bcad7dac3b709e29b6f6d284264 /bundle.c | |
parent | tests: mark tests as passing with SANITIZE=leak (diff) | |
download | git-53537c6c17737010b7090634257b6274347bdbc8.tar.xz git-53537c6c17737010b7090634257b6274347bdbc8.zip |
bundle.c: don't leak the "args" in the "struct child_process"
Fix a leak that's been here since 7366096de9d (bundle API: change
"flags" to be "extra_index_pack_args", 2021-09-05). If we can't verify
the bundle, we didn't call child_process_clear() to clear the "args".
But rather than adding an additional child_process_clear() call, let's
verify the bundle before we start preparing the process we're going to
spawn. If we fail to verify, we don't need to push anything to the
child_process "args".
Helped-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'bundle.c')
-rw-r--r-- | bundle.c | 6 |
1 files changed, 4 insertions, 2 deletions
@@ -627,6 +627,10 @@ int unbundle(struct repository *r, struct bundle_header *header, enum verify_bundle_flags flags) { struct child_process ip = CHILD_PROCESS_INIT; + + if (verify_bundle(r, header, flags)) + return -1; + strvec_pushl(&ip.args, "index-pack", "--fix-thin", "--stdin", NULL); /* If there is a filter, then we need to create the promisor pack. */ @@ -638,8 +642,6 @@ int unbundle(struct repository *r, struct bundle_header *header, strvec_clear(extra_index_pack_args); } - if (verify_bundle(r, header, flags)) - return -1; ip.in = bundle_fd; ip.no_stdout = 1; ip.git_cmd = 1; |