This is the mail archive of the
newlib@sourceware.org
mailing list for the newlib project.
Re: asprintf bugs
Eric Blake wrote:
Jeff Johnston <jjohnstn <at> redhat.com> writes:
Thanks for the analysis Eric. Patch checked in.
Regarding minimizing the asprintf default buffer size, yes, it would be
worth pursuing. I made up a trial patch. It simply checks for __SMBF
inside __smakebuf. If already set, this implies that the asprintf
family is using the routine for the first time. Try it out and let me
know what you think.
Looks correct to me. By lowering the default initial buffer size, it means
that a 1024 byte result from asprintf will call realloc up to 7 times, but my
gut feeling is that typical usage of asprintf does not often deal with strings
this long (otherwise the off-by-one error probably would have been caught much
sooner). And your patch still guarantees that asprintf(&s,"") still allocates
(something to make sure of, since that execution path does not go through
__sfvwrite_r for a realloc but asprintf must always allocate).
My original thoughts had been along the lines of making __smakebuf skip
allocation altogether if __SSTR, but then asprintf would also have to be
modified to check for f._w of 0 and do a zalloc(1) in that case; not to mention
that growth from 0 to 64 bytes requires up to 9 additional realloc calls. 64
is a good default, since in some malloc implementations (at least in glibc
malloc) it is the largest "small" chunk of memory, anything larger switches
over to "large" chunk handling. So I like your patch better than my original
idea.
Ok, great. Patch checked in.
-- Jeff J.