[vox-tech] another glibc bug?

Charles Polisher vox-tech@lists.lugod.org
Wed, 7 May 2003 14:52:06 -0700


Tim Riley wrote:
> 
> 
> Peter Jay Salzman wrote:
> 
> > before i post this to glibc-bug, i'd like to post this just in case
> > somebody has more information about this:
> >
> > #include <malloc.h>
> > #include <stdio.h>
> > #include <stdlib.h>
> > #include <mcheck.h>
> > // On my system, size_t is an unsigned int.
> >
> > int main(void)
> > {
> >    char *p = (char *) malloc(sizeof(char));
> >
> >    if (p == NULL)
> >       abort();
> >
> >    printf("I requested %u bytes.\n", sizeof(char));
> >    printf("p was allocated %u bytes.\n", malloc_usable_size(p));
> >
> >    return 0;
> > }
> >
> > the problem is that linking with libmcheck.a seems to completely confuse
> > calls to malloc_usable_size():
> >
> >    $ gcc -W -Wall try.c
> >    $ ./a.out
> >    I requested 1 bytes.
> >    p was allocated 12 bytes.
> 
> Glibc 2.1 outputted:
> I requested 1 bytes.
> p was allocated 12 bytes.
> 
> >
> >
> >    $ gcc -W -Wall try.c -lmcheck
> >    $ ./a.out
> >    I requested 1 bytes.
> >    p was allocated 4141754496 bytes.
> 
> Glibc 2.1 outputted:
> I requested 1 bytes.
> p was allocated 0 bytes.

Glibc 2.2.5 with gcc 3.2.2 looks alright:

  $ gcc -W -Wall try.c
  $ ./a.out
  I requested 1 bytes.
  p was allocated 12 bytes.
  $ gcc -W -Wall try.c -lmcheck
  $ ./a.out
  I requested 1 bytes.
  p was allocated 0 bytes.
  $ 

One wouldn't generally call malloc with 0 or 1 bytes,
this is just testing a 'corner' case, right?