Skip to content

Commit ff0935b

Browse files
pks-tgitster
authored andcommitted
builtin/merge-tree: fix leaking -X strategy options
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 <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 82ea7e5 commit ff0935b

File tree

2 files changed

+11
-3
lines changed

2 files changed

+11
-3
lines changed

builtin/merge-tree.c

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -533,6 +533,7 @@ int cmd_merge_tree(int argc, const char **argv, const char *prefix)
533533
int expected_remaining_argc;
534534
int original_argc;
535535
const char *merge_base = NULL;
536+
int ret;
536537

537538
const char * const merge_tree_usage[] = {
538539
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)
625626
strbuf_list_free(split);
626627
}
627628
strbuf_release(&buf);
628-
return 0;
629+
630+
ret = 0;
631+
goto out;
629632
}
630633

631634
/* Figure out which mode to use */
@@ -664,7 +667,11 @@ int cmd_merge_tree(int argc, const char **argv, const char *prefix)
664667

665668
/* Do the relevant type of merge */
666669
if (o.mode == MODE_REAL)
667-
return real_merge(&o, merge_base, argv[0], argv[1], prefix);
670+
ret = real_merge(&o, merge_base, argv[0], argv[1], prefix);
668671
else
669-
return trivial_merge(argv[0], argv[1], argv[2]);
672+
ret = trivial_merge(argv[0], argv[1], argv[2]);
673+
674+
out:
675+
strvec_clear(&xopts);
676+
return ret;
670677
}

t/t4301-merge-tree-write-tree.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
test_description='git merge-tree --write-tree'
44

5+
TEST_PASSES_SANITIZE_LEAK=true
56
. ./test-lib.sh
67

78
# This test is ort-specific

0 commit comments

Comments
 (0)