Обсуждение: Fix memory leak in tzparser.c
Hi hackers,
I noticed a memory leak in the addToArray() function in src/backend/utils/misc/tzparser.c.
When the override parameter is true and a duplicate timezone abbreviation is found,
the code overwrites midptr->zone without freeing the previously allocated memory.
The fix would be:
- midptr->zone = entry->zone;
+ if (midptr->zone != NULL)
+ pfree(midptr->zone);
+ midptr->zone = entry->zone;
While the memory is managed by a temp memory context that gets cleaned up
eventually, the coarse-grained management might cause some memory to
accumulate during ParseTzFile() recursive calls when processing @INCLUDE
directives.
I've attached a patch with this change in case anyone thinks it's worth
applying.
Regards,
Shixin Wang
I noticed a memory leak in the addToArray() function in src/backend/utils/misc/tzparser.c.
When the override parameter is true and a duplicate timezone abbreviation is found,
the code overwrites midptr->zone without freeing the previously allocated memory.
The fix would be:
- midptr->zone = entry->zone;
+ if (midptr->zone != NULL)
+ pfree(midptr->zone);
+ midptr->zone = entry->zone;
While the memory is managed by a temp memory context that gets cleaned up
eventually, the coarse-grained management might cause some memory to
accumulate during ParseTzFile() recursive calls when processing @INCLUDE
directives.
I've attached a patch with this change in case anyone thinks it's worth
applying.
Regards,
Shixin Wang
Вложения
On Tue, Dec 16, 2025 at 05:55:32AM +0000, Shixin Wang wrote: > While the memory is managed by a temp memory context that gets cleaned up > eventually, the coarse-grained management might cause some memory to > accumulate during ParseTzFile() recursive calls when processing @INCLUDE > directives. > > I've attached a patch with this change in case anyone thinks it's worth > applying. Why does it matter? load_tzoffsets() is the sole caller of ParseTzFile() and it uses a temporary memory context named TZParserMemory to not have to do cleanups like the one you are proposing here. -- Michael
Вложения
On Tue, Dec 16, 2025 at 1:29 PM Michael Paquier <michael@paquier.xyz> wrote: > > On Tue, Dec 16, 2025 at 05:55:32AM +0000, Shixin Wang wrote: > > While the memory is managed by a temp memory context that gets cleaned up > > eventually, the coarse-grained management might cause some memory to > > accumulate during ParseTzFile() recursive calls when processing @INCLUDE > > directives. > > > > I've attached a patch with this change in case anyone thinks it's worth > > applying. > > Why does it matter? load_tzoffsets() is the sole caller of > ParseTzFile() and it uses a temporary memory context named > TZParserMemory to not have to do cleanups like the one you are > proposing here. +1. But maybe Shixin has seen a scenario where this temporary accumulation has caused some problems because say there were many entries whose zone was replaced? Shixin, what problem did you see which prompted you to create this patch? -- Best Wishes, Ashutosh Bapat
Ashutosh Bapat <ashutosh.bapat.oss@gmail.com> writes:
> On Tue, Dec 16, 2025 at 1:29 PM Michael Paquier <michael@paquier.xyz> wrote:
>> Why does it matter? load_tzoffsets() is the sole caller of
>> ParseTzFile() and it uses a temporary memory context named
>> TZParserMemory to not have to do cleanups like the one you are
>> proposing here.
> +1. But maybe Shixin has seen a scenario where this temporary
> accumulation has caused some problems because say there were many
> entries whose zone was replaced? Shixin, what problem did you see
> which prompted you to create this patch?
There are only several hundred timezone names in the entire world,
so it's really difficult to believe any interesting amount of
transient memory consumption here.
regards, tom lane