[PATCH] This fixes a minor memory leak (detected by LeakSanitizer) in git merge.
- From
- Kevin Backhouse via GitGitGadget <gitgitgadget@gmail.com>
- Date
- Aug 18, 2023, 20:04 UTC
- Message-ID
- <pull.1577.git.1692389061490.gitgitgadget@gmail.com>
From: Kevin Backhouse <kevinbackhouse@github.com>
To reproduce (with an ASAN build):
``` mkdir test cd test git init echo x > x.txt git add . git commit -m "WIP" git checkout -b dev echo y > x.txt git add . git commit -m "WIP" git checkout main echo z > x.txt git add . git commit -m "WIP" echo a > x.txt git add . git merge dev ```
The fix is to call free_commit_list(merge_bases) when an error occurs.
Signed-off-by: Kevin Backhouse <kevinbackhouse@github.com>
---
This fixes a minor memory leak (detected by LeakSanitizer) in git merge
To reproduce (with an ASAN build):
mkdir test
cd test
git init
echo x > x.txt
git add .
git commit -m "WIP"
git checkout -b dev
echo y > x.txt
git add .
git commit -m "WIP"
git checkout main
echo z > x.txt
git add .
git commit -m "WIP"
echo a > x.txt
git add .
git merge dev
The fix is to call free_commit_list(merge_bases) when an error occurs.Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1577%2Fkevinbackhouse%2Ffree-merge-bases-v1 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1577/kevinbackhouse/free-merge-bases-v1 Pull-Request: https://github.com/gitgitgadget/git/pull/1577
merge-ort-wrappers.c | 4 +++- merge-ort.c | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/merge-ort-wrappers.c b/merge-ort-wrappers.c index 4acedf3c338..aeb56c9970c 100644 --- a/merge-ort-wrappers.c +++ b/merge-ort-wrappers.c @@ -54,8 +54,10 @@ int merge_ort_recursive(struct merge_options *opt, struct tree *head = repo_get_commit_tree(opt->repo, side1); struct merge_result tmp; - if (unclean(opt, head)) + if (unclean(opt, head)) { + free_commit_list(merge_bases); return -1; + } memset(&tmp, 0, sizeof(tmp)); merge_incore_recursive(opt, merge_bases, side1, side2, &tmp); diff --git a/merge-ort.c b/merge-ort.c index 8631c997002..a0eb91fb011 100644 --- a/merge-ort.c +++ b/merge-ort.c @@ -5070,8 +5070,10 @@ static void merge_ort_internal(struct merge_options *opt, opt->branch1 = "Temporary merge branch 1"; opt->branch2 = "Temporary merge branch 2"; merge_ort_internal(opt, NULL, prev, next, result); - if (result->clean < 0) + if (result->clean < 0) { + free_commit_list(merge_bases); return; + } opt->branch1 = saved_b1; opt->branch2 = saved_b2; opt->priv->call_depth--; base-commit: f9972720e9a405e4f6924a7cde0ed5880687f4d0
-- gitgitgadget