[PATCH 08/26] line-log: fix leak when rewriting commit parents
- From
Patrick Steinhardt <ps@pks.im>
- Date
- Nov 6, 2024, 15:10 UTC
- Message-ID
- <c79be063a63e9f847fee5d5e58570df91157750f.1730901926.git.ps@pks.im>
- In-Reply-To
- <cover.1730901926.git.ps@pks.im>
In `process_ranges_merge_commit()` we try to figure out which of the parents can be blamed for the given line changes. When we figure out that none of the files in the line-log have changed we assign the complete blame to that commit and rewrite the parents of the current commit to only use that single parent.
This is done via `commit_list_append()`, which is misleadingly _not_ appending to the list of parents. Instead, we overwrite the parents with the blamed parent. This makes us lose track of the old pointers, creating a memory leak.
Fix this issue by freeing the parents before we overwrite them.
Signed-off-by: Patrick Steinhardt <ps@pks.im> --- line-log.c | 1 + t/t4211-line-log.sh | 1 + 2 files changed, 2 insertions(+)
diff --git a/line-log.c b/line-log.c index bca9bd80407..bc67b75d10d 100644 --- a/line-log.c +++ b/line-log.c @@ -1237,6 +1237,7 @@ static int process_ranges_merge_commit(struct rev_info *rev, struct commit *comm * don't follow any other path in history */ add_line_range(rev, parents[i], cand[i]); + free_commit_list(commit->parents); commit_list_append(parents[i], &commit->parents); ret = 0; diff --git a/t/t4211-line-log.sh b/t/t4211-line-log.sh index 950451cf6a6..1d6dd982a2a 100755 --- a/t/t4211-line-log.sh +++ b/t/t4211-line-log.sh @@ -4,6 +4,7 @@ test_description='test log -L' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success 'setup (import history)' '
-- 2.47.0.229.g8f8d6eee53.dirty