diff: free state populated via options

The `objfind` and `anchors` members of `struct diff_options` are
populated via option parsing, but are never freed in `diff_free()`. Fix
this to plug those memory leaks.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Patrick Steinhardt 2024-08-14 08:52:55 +02:00 committed by Junio C Hamano
parent 0aaca0ec09
commit 36f971f861
4 changed files with 14 additions and 0 deletions

10
diff.c
View file

@ -6717,6 +6717,16 @@ void diff_free(struct diff_options *options)
if (options->no_free)
return;
if (options->objfind) {
oidset_clear(options->objfind);
FREE_AND_NULL(options->objfind);
}
for (size_t i = 0; i < options->anchors_nr; i++)
free(options->anchors[i]);
FREE_AND_NULL(options->anchors);
options->anchors_nr = options->anchors_alloc = 0;
diff_free_file(options);
diff_free_ignore_regex(options);
clear_pathspec(&options->pathspec);

View file

@ -1,6 +1,8 @@
#!/bin/sh
test_description='test finding specific blobs in the revision walking'
TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh
test_expect_success 'setup ' '

View file

@ -2,6 +2,7 @@
test_description='anchored diff algorithm'
TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh
test_expect_success '--anchored' '

View file

@ -2,6 +2,7 @@
test_description='remerge-diff handling'
TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh
# This test is ort-specific