asprintf() issue
Szabolcs Nagy
szabolcs.nagy@arm.com
Wed May 13 16:42:00 GMT 2015
On 13/05/15 17:14, Joseph Myers wrote:
> On Wed, 13 May 2015, Archie Cobbs wrote:
>> On Tue, May 12, 2015 at 10:11 AM, Florian Weimer <fweimer@redhat.com> wrote:
>> diff --git a/manual/stdio.texi b/manual/stdio.texi
>> index e407170..bf7cffe 100644
>> --- a/manual/stdio.texi
>> +++ b/manual/stdio.texi
>> @@ -2551,6 +2551,8 @@ The return value is the number of characters
>> allocated for the buffer, or
>> less than zero if an error occurred. Usually this means that the buffer
>> could not be allocated.
>>
>> +If an error occurs, the contents of *@var{ptr} are not modified.
>
> It's not clear to me that we want to guarantee this as an API. (Though
> the existence of code relying on it would indicate that if we changed it,
> we should also change the symbol version and keep a version that doesn't
> modify it at the old symbol version. And as I understand that bug report,
> the code in question would work just as well if glibc changed to set it to
> NULL, which was previously requested in
> <https://sourceware.org/ml/libc-alpha/2001-12/msg00021.html>. I don't see
> any good reason to do something other than leaving it unchanged or setting
> it to NULL, however.)
>
if all bsd set *ptr to 0 on error then glibc should not
guarantee incompatible behaviour.
fwiw musl sets *ptr to 0 on ENOMEM, but happens to leave
it unmodified on other sprintf errors (eg. EILSEQ).
> Does anyone know of implementations that do something other than leaving
> the value unchanged or setting it to NULL? The external specifications in
> question are LSB and TR 24731-2:2010 (which defers to LSB), and they seem
> to be silent on this issue.
>
More information about the Libc-alpha
mailing list