Re: [PATCH] newlib: Fix memory leak regarding gdtoa-based _ldtoa_r().
Takashi Yano <[email protected]>
| Newsgroups | gmane.comp.lib.newlib |
|---|---|
| Message-ID | <[email protected]> |
On Tue, 1 Aug 2023 14:35:54 +0200 Corinna Vinschen wrote: > Hi Takashi, > > On Aug 1 17:57, Takashi Yano wrote: > > After the commit a4705d387f78, printf() for floating-point values > > causes a memory leak. The legacy _ldtoa_r() assumed the char pointer > > returned will be free'ed by Bfree(). However, gdtoa-based _ldtoa_r() > > returns the pointer returned by gdtoa() which should be free'ed by > > freedtoa(). Due to this issue, the caller of _ldtoa_r() fails to free > > the allocated char buffer. This is the cause of the said memory leak. > > https://cygwin.com/pipermail/cygwin/2023-July/254054.html > > > > With this patch, a new buffer is allocated using Balloc() and the > > buffer returned by gdtoa() is copied into it. Then, free the original > > buffer using freedtoa(). > > Basically this is ok. But the question is this. Isn't it possible > to redefine the allocator in gdtoa so that it uses a Balloced buffer > right away? Forinstance, by using overloading macros? That would > allow to get away without having to copy stuff... Thanks for the advice. I tried that. Please check v2 patch. -- Takashi Yano <[email protected]>