This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: asprintf() issue
- From: "Michael Kerrisk (man-pages)" <mtk dot manpages at gmail dot com>
- To: Carlos O'Donell <carlos at redhat dot com>, Joseph Myers <joseph at codesourcery dot com>, Archie Cobbs <archie dot cobbs at gmail dot com>
- Cc: mtk dot manpages at gmail dot com, Florian Weimer <fweimer at redhat dot com>, libc-alpha at sourceware dot org
- Date: Thu, 14 May 2015 15:41:54 +0200
- Subject: Re: asprintf() issue
- Authentication-results: sourceware.org; auth=none
- References: <CANSoFxt-cdc-+C4u-rTENMtY4X9RpRSuv+axDswSPxbDgag8_Q at mail dot gmail dot com> <55520F8F dot 9020308 at redhat dot com> <CANSoFxvac6_uBgwzWm5q6U+GcWzzKtDtDP0BVvE4eL08zXHs5Q at mail dot gmail dot com> <5552183C dot 2070809 at redhat dot com> <CANSoFxv7uO2Niq+wVKsC9xoDYuNgqHFxJnLrkgNqfKpFwzde=Q at mail dot gmail dot com> <alpine dot DEB dot 2 dot 10 dot 1505131601320 dot 30846 at digraph dot polyomino dot org dot uk> <555385F4 dot 5000409 at redhat dot com>
On 05/13/2015 07:12 PM, Carlos O'Donell wrote:
> On 05/13/2015 12:14 PM, Joseph Myers wrote:
>> 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.
>
> Windows lacks asprintf, Solaris lacks asprintf, HPUX lacks asprintf,
> so we have little guidance from these OSs.
Actually, it looks like Soalris does have it.
See http://docs.oracle.com/cd/E36784_01/html/E36874/asprintf-3c.html
which says:
If sufficient space cannot be allocated, the asprintf() function
returns -1 and sets ret to be a NULL pointer.
> I know of no other implementations that do something other than leave the
> value unchanged or set to NULL.
>
> My preference is that we set it to NULL. This will aid in debugging as any
> dereferences to NULL will immediately trap. Leaving the value unchanged
> could result in further manipulation of an invalid memory location and
> program corruption.
>
> This is in line with what the BSDs do, and therefore aids in porting code
> between them.
And also in line with Solaris.
> So +1 to set it to NULL.
Not that I get to vote, but +1 to the +1 ;-).
Cheers,
Michael
--
Michael Kerrisk
Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
Linux/UNIX System Programming Training: http://man7.org/training/