[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?