Re: [PATCH v4 15/19] object-file.c: release the "tag" in check_tag()
- From
René Scharfe <l.s.r@web.de>
- Date
- Jan 17, 2023, 19:58 UTC
- Message-ID
- <7e571cdd-c0fa-7519-848c-b0bc4613abab@web.de>
- In-Reply-To
- <patch-v4-15.19-66c24afb893-20230117T151202Z-avarab@gmail.com>
Am 17.01.23 um 18:11 schrieb Ævar Arnfjörð Bjarmason:
Show 9 quoted lines
> Fix a memory leak that's been with us ever since c879daa2372 (Make > hash-object more robust against malformed objects, 2011-02-05). With > "HASH_FORMAT_CHECK" (used by "hash-object" and "replace") we'll parse > tags into a throwaway variable on the stack, but weren't freeing the > "item->tag" we might malloc() when doing so. > > The clearing that release_tag_memory() does for us is redundant here, > but let's use it as-is anyway. It only has one other existing caller, > which does need the tag to be cleared.
Calling it is better than getting our hands dirty with tag internals here.
There's similar leak in check_commit() in the same file, but plugging it would require exporting unparse_commit(). Or perhaps using the heavy hammer that is release_commit_memory()? Anyway, it doesn't seem simple to me, so that would be a patch for a separate series.
Show 49 quoted lines
>
> Mark the tests that now pass in their entirety as passing under
> "SANITIZE=leak", which means we'll test them as part of the
> "linux-leaks" CI job.
>
> Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
> ---
> object-file.c | 1 +
> t/t3800-mktag.sh | 1 +
> t/t5302-pack-index.sh | 2 ++
> 3 files changed, 4 insertions(+)
>
> diff --git a/object-file.c b/object-file.c
> index 80a0cd3b351..b554266aff4 100644
> --- a/object-file.c
> +++ b/object-file.c
> @@ -2324,6 +2324,7 @@ static void check_tag(const void *buf, size_t size)
> memset(&t, 0, sizeof(t));
> if (parse_tag_buffer(the_repository, &t, buf, size))
> die(_("corrupt tag"));
> + release_tag_memory(&t);
> }
>
> static int index_mem(struct index_state *istate,
> diff --git a/t/t3800-mktag.sh b/t/t3800-mktag.sh
> index e3cf0ffbe59..d3e428ff46e 100755
> --- a/t/t3800-mktag.sh
> +++ b/t/t3800-mktag.sh
> @@ -4,6 +4,7 @@
>
> test_description='git mktag: tag object verify test'
>
> +TEST_PASSES_SANITIZE_LEAK=true
> . ./test-lib.sh
>
> ###########################################################
> diff --git a/t/t5302-pack-index.sh b/t/t5302-pack-index.sh
> index b0095ab41d3..54b11f81c63 100755
> --- a/t/t5302-pack-index.sh
> +++ b/t/t5302-pack-index.sh
> @@ -4,6 +4,8 @@
> #
>
> test_description='pack index with 64-bit offsets and object CRC'
> +
> +TEST_PASSES_SANITIZE_LEAK=true
> . ./test-lib.sh
>
> test_expect_success 'setup' '