]> git.ipfire.org Git - thirdparty/git.git/commitdiff
pack-bitmap: clean up include_check after use
authorJeff King <peff@peff.net>
Wed, 28 Apr 2021 15:42:30 +0000 (11:42 -0400)
committerJunio C Hamano <gitster@pobox.com>
Thu, 29 Apr 2021 01:03:46 +0000 (10:03 +0900)
When a bitmap walk has to traverse (to fill in non-bitmapped objects),
we use rev_info's include_check mechanism to let us stop the traversal
early. But after setting the function and its data parameter, we never
clean it up. This means that if the rev_info is used for a subsequent
traversal without bitmaps, it will unexpectedly call into our
include_check function (worse, it will do so pointing to a now-defunct
stack variable in include_check_data, likely resulting in a segfault).

There's no code which does this now, but it's an accident waiting to
happen. Let's clean up after ourselves in the bitmap code.

Reported-by: David Emett <dave@sp4m.net>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
pack-bitmap.c

index 1ebe0c81628a35932c3d05ccb1306834442568a0..84a9195e721d37c3b5f395ede97e4e2ddd725193 100644 (file)
@@ -630,6 +630,9 @@ static struct bitmap *find_objects(struct bitmap_index *bitmap_git,
                traverse_commit_list_filtered(filter, revs,
                                              show_commit, show_object,
                                              &show_data, NULL);
+
+               revs->include_check = NULL;
+               revs->include_check_data = NULL;
        }
 
        return base;