diff options
author | Lidong Yan <502024330056@smail.nju.edu.cn> | 2025-06-09 08:18:44 +0000 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2025-06-09 09:04:47 -0700 |
commit | 81cd1eef7dfc3edcdeaea1a2e8d5e31cc10e244a (patch) | |
tree | 6c4fd32cd91e84e907316e5a1b4be72c8cfb2d4b /commit.c | |
parent | fcfe60668e05ffde2610bfef9045797618c145ac (diff) |
pack-bitmap: remove checks before bitmap_free
In pack-bitmap.c:find_boundary_objects(), the roots_bitmap is only freed
if cascade_pseudo_merges_1() fails. However, cascade_pseudo_merges_1()
uses roots_bitmap as a mutable reference without taking ownership of it.
As a result, if cascade_pseudo_merges_1() succeeds, roots_bitmap is leaked.
And this leak currently lacks a dedicated test to detect it.
To fix this leak, remove if cascade_pseudo_merges_1() succeed check and
always calling bitmap_free(roots_bitmap);
To trigger this leak, we need roots_bitmap that contains at least one
pseudo merge. So that we can use pseudo merge bitmap when we compute roots
reachable bitmap. Here we create two commits: first A then B. Add A
to the pseudo-merge and perform a traversal over the range A..B.
In this scenario, the "haves" set will be {A}, and cascade_pseudo_merges_1
will succeed, thereby exposing the leak due to the missing roots_bitmap
cleanup.
Signed-off-by: Lidong Yan <502024330056@smail.nju.edu.cn>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'commit.c')
0 files changed, 0 insertions, 0 deletions