Re: pg_dump: Fix dangling pointer in EndCompressorZstd() - Mailing list pgsql-hackers

From Daniel Gustafsson
Subject Re: pg_dump: Fix dangling pointer in EndCompressorZstd()
Date
Msg-id E85883B5-DAFA-40B9-9E0A-F2ED6A4144BA@yesql.se
Whole thread Raw
In response to Re: pg_dump: Fix dangling pointer in EndCompressorZstd()  (Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>)
Responses Re: pg_dump: Fix dangling pointer in EndCompressorZstd()
List pgsql-hackers
> On 16 Apr 2025, at 13:48, Ashutosh Bapat <ashutosh.bapat.oss@gmail.com> wrote:
>
> On Wed, Apr 16, 2025 at 1:57 PM Alexander Kuznetsov
> <kuznetsovam@altlinux.org> wrote:
>>
>> Hello everyone,
>>
>> We've found that EndCompressorZstd() doesn't set cs->private_data to NULL after pg_free(),
>> unlike other EndCompressor implementations.
>> While this doesn't currently cause issues (as the pointer soon gets reassigned),
>> we recommend fixing this to maintain consistency with other implementations and prevent potential future issues.
>>
>> The patch is attached, would appreciate your thoughts on this change.
>
> Thanks for the patch.
>
> The next thing that happens in EndCompressor() is freeing cs itself.
> So cs->private_data is not used anywhere, so no harm in the current
> code. But it's better to set to NULL since EndCompressorZstd()
> wouldn't know how it's being accessed after returning from there. The
> other implementation of CompressionState::end() EndCompressorGzip()
> calls DeflateCompressorEnd() which also sets cs->private_data
> explicitly. So should EndCompressorZstd().

Agreed, while it's perfectly safe today the end method should not make
assumptions about the use of the private_data pointer upon return and should
leave it set to NULL.

--
Daniel Gustafsson




pgsql-hackers by date:

Previous
From: Tender Wang
Date:
Subject: Re: Typos in the comment for the estimate_multivariate_ndistinct()
Next
From: torikoshia
Date:
Subject: Re: Align memory context level numbering in pg_log_backend_memory_contexts()