]> git.ipfire.org Git - thirdparty/git.git/commitdiff
bundle.c: don't leak the "args" in the "struct child_process"
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Mon, 6 Feb 2023 23:07:37 +0000 (00:07 +0100)
committerJunio C Hamano <gitster@pobox.com>
Mon, 6 Feb 2023 23:34:36 +0000 (15:34 -0800)
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>
bundle.c

index 4ef7256aa11e8b43691f238970da6c6bf21cd4ee..9ebb10a8f72d3140a7b4051a28fd21485f14e537 100644 (file)
--- a/bundle.c
+++ b/bundle.c
@@ -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;