diff options
| author | Patrick Steinhardt <ps@pks.im> | 2024-11-20 14:39:37 +0100 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2024-11-21 08:23:42 +0900 |
| commit | 141766d1bb801ae2a9c7358920ce8dc9697f53c4 (patch) | |
| tree | 0d8c3bfc70bebdf1cfcd5ff7a2483702c4f8174b | |
| parent | c1e98f90103e8d98ef441ce8f609cf3bc8fa538b (diff) | |
| download | git-141766d1bb801ae2a9c7358920ce8dc9697f53c4.tar.xz | |
line-log: fix leak when rewriting commit parents
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>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
| -rw-r--r-- | line-log.c | 1 | ||||
| -rwxr-xr-x | t/t4211-line-log.sh | 1 |
2 files changed, 2 insertions, 0 deletions
diff --git a/line-log.c b/line-log.c index bca9bd8040..bc67b75d10 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 950451cf6a..1d6dd982a2 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)' ' |
