summaryrefslogtreecommitdiff
path: root/diff.c
diff options
context:
space:
mode:
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>2022-02-16 10:56:29 (GMT)
committerJunio C Hamano <gitster@pobox.com>2022-02-16 21:50:37 (GMT)
commit6ee36364eb32287f071878a91d3bbcd86313754a (patch)
treef506d1f0dbdc05f8c81c042faa7d9fecbfdef9cf /diff.c
parent244c27242f44e6b88e3a381c90bde08d134c274b (diff)
downloadgit-6ee36364eb32287f071878a91d3bbcd86313754a.zip
git-6ee36364eb32287f071878a91d3bbcd86313754a.tar.gz
git-6ee36364eb32287f071878a91d3bbcd86313754a.tar.bz2
diff.[ch]: have diff_free() free options->parseopts
The "struct option" added in 4a288478394 (diff.c: prepare to use parse_options() for parsing, 2019-01-27) would be free'd in the case of diff_setup_done() being called. But not all codepaths that allocate it reach that, e.g. "t6427-diff3-conflict-markers.sh" will now free memory that it didn't free before. By using FREE_AND_NULL() here (which diff_setup_done() also does) we ensure that we free the memory, and that we won't have double-free's. Before this running: ./t6427-diff3-conflict-markers.sh -vixd --run=7 Would report: SUMMARY: LeakSanitizer: 7823 byte(s) leaked in 6 allocation(s). But now we'll report: SUMMARY: LeakSanitizer: 703 byte(s) leaked in 5 allocation(s). I.e. the largest leak in that particular test has now been addressed. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Reviewed-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'diff.c')
-rw-r--r--diff.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/diff.c b/diff.c
index 0aef3db..fb8bc8a 100644
--- a/diff.c
+++ b/diff.c
@@ -6346,6 +6346,7 @@ void diff_free(struct diff_options *options)
diff_free_file(options);
diff_free_ignore_regex(options);
clear_pathspec(&options->pathspec);
+ FREE_AND_NULL(options->parseopts);
}
void diff_flush(struct diff_options *options)