CC += Robert, Joseph, gcc@

On Thu, Oct 17, 2024 at 04:30:27PM GMT, Alejandro Colomar wrote:
> On Thu, Oct 17, 2024 at 04:23:29PM GMT, Alejandro Colomar wrote:
> > CC += Doug, as the author of the original malloc(3).
> > 
> > On Thu, Oct 17, 2024 at 04:21:22PM GMT, Alejandro Colomar wrote:
> > > Hi!
> > > 
> > > наб and I have been researching about malloc(0) and realloc(p,0), and
> > > have written our findings here:
> > > 
> > > <https://github.com/shadow-maint/shadow/pull/1095>
> > > <https://nabijaczleweli.xyz/content/blogn_t/017-malloc0.html>
> > > 
> > > -  Every default malloc(0) had always returned a unique pointer.
> > > -  Every realloc(,0) had always behaved congruently with malloc(0).
> > > -  The weird malloc(0)=NULL was a bug in SysV r2's optimized alternative
> > >    -lmalloc library.  The documentation still didn't allow returning
> > >    NULL.
> > > -  SVID surprisingly documented that bug in -lmalloc as if it were the
> > >    only good behavior, making every default malloc(0) non-conforming.
> > >    This was a huge mistake/crime.  So far so good for realloc(,0).
> > > 
> > > -  X3J11 (ANSI C) decided that realloc(p,0) shall be equivalent to
> > >    free(p) (allegedly, in line with their self-inflicted policy of not
> > >    allowing zero-size objects, which BTW was never true, since malloc(0)
> > >    and realloc(NULL,0) continued to support zero-size objects).  This
> > >    was a hallucination of ANSI C.  No implementations had done this.
> > >    Ever.  No documentation or standards document had specified this.
> > >    Ever.
> > > -  POSIX.1-2001 (Issue 6) blindly followed C89, making every POSIX
> > >    system non-conforming.
> > > 
> > > -  C99 and POSIX.1-2008 fixed the issue, by reverting to the historical
> > >    realloc(p,0) behavior of being congruent to malloc(0).
> > > 
> > > -  glibc, in 2006/2007, made a so-called bugfix change to conform to
> > >    C89, which effectively made realloc(p,0) non-conforming to C99.  This
> > >    happened in the following commit:
> > > 
> > >   commit 11bf311edc76f5ddc469a8c396e313e82d76be15
> > >   Author: Ulrich Drepper <drep...@redhat.com>
> > >   Date:   Thu Jan 11 21:51:07 2007 +0000
> > > 
> > >       [BZ #2510, BZ #2830, BZ #3137, BZ #3313, BZ #3426, BZ #3465, BZ 
> > > #3480, BZ #3483, BZ #
> > >   3493, BZ #3514, BZ #3515, BZ #3664, BZ #3673, BZ #3674]
> > > 
> > >   [...]
> > > 
> > >       2006-12-08  Ulrich Drepper  <drep...@redhat.com>
> > >               * malloc/memusage.c: Handle realloc with new size of zero 
> > > and
> > >               non-NULL pointer correctly.
> > > 
> > >   [...]
> > > 
> > > Please revert that commit, and make realloc(p,0) conform to C99, C11,
> > > C17, and POSIX.1-2008.  This is the historical right behavior of
> > > realloc(p,0), and what the BSDs do.
> 
> I realized that I didn't clarify what the bug is.  realloc(p,0) should
> return a unique pointer, just like malloc(0) does.  Returning NULL is
> brain-damaged.
> 
> > > 
> > > That so-called bugfix probably silently broke algorithms for which 0 is
> > > not a special case.
> > > 
> > > C23 will break realloc(p,0) even further, but let's ignore that mistake.
> > > 
> > > 
> > > Have a lovely day!
> > > Alex
> > > 
> > > 
> > > -- 
> > > <https://www.alejandro-colomar.es/>
> > 
> > 
> > 
> > -- 
> > <https://www.alejandro-colomar.es/>
> 
> 
> 
> -- 
> <https://www.alejandro-colomar.es/>



-- 
<https://www.alejandro-colomar.es/>

Attachment: signature.asc
Description: PGP signature

Reply via email to