]> git.ipfire.org Git - thirdparty/git.git/commit
diffcore-break: avoid segfault with freed entries
authorHan Young <hanyang.tony@bytedance.com>
Tue, 24 Feb 2026 06:13:29 +0000 (14:13 +0800)
committerJunio C Hamano <gitster@pobox.com>
Tue, 24 Feb 2026 15:20:44 +0000 (07:20 -0800)
commit2d88ab078db03b6a608d30b8ef49cc7afb4b2f1c
tree81ef903b262e3ddc5e2a38189d4aeb549751162b
parent67ad42147a7acc2af6074753ebd03d904476118f
diffcore-break: avoid segfault with freed entries

After we have freed the file pair, we should set the queue reference to null.
When computing a diff in a partial clone, there is a chance that we
could trigger a prefetch of missing objects when there are freed entries in
the global diff queue due to break-rewrites detection. The segfault only occurs
if an entry has been freed by break-rewrites and there is an entry
to be prefetched.

There is a new test in t4067 that trigger the segmentation fault that results
in this case. The test explicitly fetch the necessary blobs to trigger the
break rewrites, some blobs are left to be prefetched.

The fix is to set the queue pointer to NULL after it is freed, the prefetch
will skip NULL entries.

Signed-off-by: Han Young <hanyang.tony@bytedance.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
diffcore-break.c
t/t4067-diff-partial-clone.sh