diff.[ch]: have diff_free() free options->parseopts
commit6ee36364eb32287f071878a91d3bbcd86313754a
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Wed, 16 Feb 2022 10:56:29 +0000 (16 11:56 +0100)
committerJunio C Hamano <gitster@pobox.com>
Wed, 16 Feb 2022 21:50:37 +0000 (16 13:50 -0800)
treef506d1f0dbdc05f8c81c042faa7d9fecbfdef9cf
parent244c27242f44e6b88e3a381c90bde08d134c274b
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>
diff.c