Thread
-
Fix memory leak in tzparser.c
Shixin Wang <wang-shi-xin@outlook.com> — 2025-12-16T05:55:32Z
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
-
Re: Fix memory leak in tzparser.c
Michael Paquier <michael@paquier.xyz> — 2025-12-16T07:59:35Z
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
-
Re: Fix memory leak in tzparser.c
Ashutosh Bapat <ashutosh.bapat.oss@gmail.com> — 2025-12-17T13:17:47Z
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
-
Re: Fix memory leak in tzparser.c
Tom Lane <tgl@sss.pgh.pa.us> — 2025-12-17T15:49:05Z
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