diff options
| author | Junio C Hamano <gitster@pobox.com> | 2022-02-09 14:21:00 -0800 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2022-02-09 14:21:00 -0800 |
| commit | c70b5e718749a64eb3a41ecb585bfb85f518878f (patch) | |
| tree | 9357d8fc7ab58455239d398e497b087f07116f1e | |
| parent | c70bc338e9a35b45263c3c68913ad516e9e70d62 (diff) | |
| parent | 6046f7a91c3bf5c76702f10a4a83e8a63afe2fb4 (diff) | |
| download | git-c70b5e718749a64eb3a41ecb585bfb85f518878f.tar.xz | |
Merge branch 'en/plug-leaks-in-merge'
Leakfix.
* en/plug-leaks-in-merge:
merge: fix memory leaks in cmd_merge()
merge-ort: fix memory leak in merge_ort_internal()
| -rw-r--r-- | builtin/merge.c | 6 | ||||
| -rw-r--r-- | merge-ort.c | 10 |
2 files changed, 10 insertions, 6 deletions
diff --git a/builtin/merge.c b/builtin/merge.c index fed1ff4017..133831d42f 100644 --- a/builtin/merge.c +++ b/builtin/merge.c @@ -1273,7 +1273,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix) int best_cnt = -1, merge_was_ok = 0, automerge_was_ok = 0; struct commit_list *common = NULL; const char *best_strategy = NULL, *wt_strategy = NULL; - struct commit_list *remoteheads, *p; + struct commit_list *remoteheads = NULL, *p; void *branch_to_free; int orig_argc = argc; @@ -1752,6 +1752,10 @@ int cmd_merge(int argc, const char **argv, const char *prefix) ret = suggest_conflicts(); done: + if (!automerge_was_ok) { + free_commit_list(common); + free_commit_list(remoteheads); + } strbuf_release(&buf); free(branch_to_free); return ret; diff --git a/merge-ort.c b/merge-ort.c index b0ff9a7287..d455fca7d2 100644 --- a/merge-ort.c +++ b/merge-ort.c @@ -4579,7 +4579,7 @@ static void merge_ort_internal(struct merge_options *opt, struct commit *h2, struct merge_result *result) { - struct commit_list *iter; + struct commit *next; struct commit *merged_merge_bases; const char *ancestor_name; struct strbuf merge_base_abbrev = STRBUF_INIT; @@ -4608,7 +4608,8 @@ static void merge_ort_internal(struct merge_options *opt, ancestor_name = merge_base_abbrev.buf; } - for (iter = merge_bases; iter; iter = iter->next) { + for (next = pop_commit(&merge_bases); next; + next = pop_commit(&merge_bases)) { const char *saved_b1, *saved_b2; struct commit *prev = merged_merge_bases; @@ -4625,7 +4626,7 @@ static void merge_ort_internal(struct merge_options *opt, saved_b2 = opt->branch2; opt->branch1 = "Temporary merge branch 1"; opt->branch2 = "Temporary merge branch 2"; - merge_ort_internal(opt, NULL, prev, iter->item, result); + merge_ort_internal(opt, NULL, prev, next, result); if (result->clean < 0) return; opt->branch1 = saved_b1; @@ -4636,8 +4637,7 @@ static void merge_ort_internal(struct merge_options *opt, result->tree, "merged tree"); commit_list_insert(prev, &merged_merge_bases->parents); - commit_list_insert(iter->item, - &merged_merge_bases->parents->next); + commit_list_insert(next, &merged_merge_bases->parents->next); clear_or_reinit_internal_opts(opt->priv, 1); } |
