http://sourceware.org/bugzilla/show_bug.cgi?id=3352 Index: libc/elf/dl-minimal.c =================================================================== RCS file: /cvs/glibc/libc/elf/dl-minimal.c,v retrieving revision 1.48.2.2 retrieving revision 1.48.2.3 diff -u -r1.48.2.2 -r1.48.2.3 --- libc/elf/dl-minimal.c 19 Dec 2005 12:11:14 -0000 1.48.2.2 +++ libc/elf/dl-minimal.c 25 Oct 2006 19:13:35 -0000 1.48.2.3 @@ -1,5 +1,6 @@ /* Minimal replacements for basic facilities used in the dynamic linker. - Copyright (C) 1995-1998,2000-2002,2004,2005 Free Software Foundation, Inc. + Copyright (C) 1995-1998,2000-2002,2004,2005,2006 + Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -128,14 +129,13 @@ void * weak_function realloc (void *ptr, size_t n) { - void *new; if (ptr == NULL) return malloc (n); assert (ptr == alloc_last_block); + size_t old_size = alloc_ptr - alloc_last_block; alloc_ptr = alloc_last_block; - new = malloc (n); - assert (new == ptr); - return new; + void *new = malloc (n); + return new != ptr ? memcpy (new, ptr, old_size) : new; } /* Avoid signal frobnication in setjmp/longjmp. Keeps things smaller. */