]> git.ipfire.org Git - thirdparty/git.git/commitdiff
builtin/merge-tree: fix leaking `-X` strategy options
authorPatrick Steinhardt <ps@pks.im>
Thu, 22 Aug 2024 09:17:21 +0000 (11:17 +0200)
committerJunio C Hamano <gitster@pobox.com>
Thu, 22 Aug 2024 16:18:04 +0000 (09:18 -0700)
The `-X` switch for git-merge-tree(1) will push each option into a local
`xopts` vector that we then end up parsing. The vector never gets freed
though, causing a memory leak. Plug it.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/merge-tree.c
t/t4301-merge-tree-write-tree.sh

index 9bca9b5f33c7c1bd40564b8936004224f17b482e..c00469ed3dbedc45e8e2dc24e0d2d935b47c06b3 100644 (file)
@@ -533,6 +533,7 @@ int cmd_merge_tree(int argc, const char **argv, const char *prefix)
        int expected_remaining_argc;
        int original_argc;
        const char *merge_base = NULL;
+       int ret;
 
        const char * const merge_tree_usage[] = {
                N_("git merge-tree [--write-tree] [<options>] <branch1> <branch2>"),
@@ -625,7 +626,9 @@ int cmd_merge_tree(int argc, const char **argv, const char *prefix)
                        strbuf_list_free(split);
                }
                strbuf_release(&buf);
-               return 0;
+
+               ret = 0;
+               goto out;
        }
 
        /* Figure out which mode to use */
@@ -664,7 +667,11 @@ int cmd_merge_tree(int argc, const char **argv, const char *prefix)
 
        /* Do the relevant type of merge */
        if (o.mode == MODE_REAL)
-               return real_merge(&o, merge_base, argv[0], argv[1], prefix);
+               ret = real_merge(&o, merge_base, argv[0], argv[1], prefix);
        else
-               return trivial_merge(argv[0], argv[1], argv[2]);
+               ret = trivial_merge(argv[0], argv[1], argv[2]);
+
+out:
+       strvec_clear(&xopts);
+       return ret;
 }
index eea19907b550c4a97a7ca7760f1be30bea7d8db0..37f1cd7364ce0d4eab374b6a40bb6125dd76f7af 100755 (executable)
@@ -2,6 +2,7 @@
 
 test_description='git merge-tree --write-tree'
 
+TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 
 # This test is ort-specific