From 73f6403bd41388e22727bd2943c0c78cfed0b4da Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sat, 30 Oct 2004 18:04:21 +0000 Subject: Update. 2004-10-30 Andreas Schwab * sysdeps/unix/sysv/linux/waitid.c: Include for NULL. 2004-10-30 Ulrich Drepper * malloc/malloc.c (_int_free): Use unique comments for the error cases. --- ChangeLog | 9 +++++++++ malloc/malloc.c | 26 +++++++++++++++++++------- sysdeps/unix/sysv/linux/waitid.c | 1 + 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5fcfdae..fde483a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2004-10-30 Andreas Schwab + + * sysdeps/unix/sysv/linux/waitid.c: Include for NULL. + +2004-10-30 Ulrich Drepper + + * malloc/malloc.c (_int_free): Use unique comments for the error + cases. + 2004-10-28 Roland McGrath * sysdeps/mach/hurd/i386/tls.h (_hurd_tls_fork): Use i386_thread_state diff --git a/malloc/malloc.c b/malloc/malloc.c index 2e91952..6d6294c 100644 --- a/malloc/malloc.c +++ b/malloc/malloc.c @@ -4198,6 +4198,8 @@ _int_free(mstate av, Void_t* mem) /* free(0) has no effect */ if (mem != 0) { + const char *errstr = NULL; + p = mem2chunk(mem); size = chunksize(p); @@ -4207,7 +4209,9 @@ _int_free(mstate av, Void_t* mem) here by accident or by "design" from some intruder. */ if (__builtin_expect ((uintptr_t) p > (uintptr_t) -size, 0)) { - malloc_printerr (check_action, "free(): invalid pointer", mem); + errstr = "free(): invalid pointer"; + errout: + malloc_printerr (check_action, errstr, mem); return; } @@ -4235,9 +4239,8 @@ _int_free(mstate av, Void_t* mem) record we are going to add (i.e., double free). */ if (__builtin_expect (*fb == p, 0)) { - double_free: - malloc_printerr (check_action, "double free or corruption", mem); - return; + errstr = "double free or corruption (fasttop)"; + goto errout; } p->fd = *fb; *fb = p; @@ -4253,15 +4256,24 @@ _int_free(mstate av, Void_t* mem) /* Lightweight tests: check whether the block is already the top block. */ if (__builtin_expect (p == av->top, 0)) - goto double_free; + { + errstr = "double free or corruption (top)"; + goto errout; + } /* Or whether the next chunk is beyond the boundaries of the arena. */ if (__builtin_expect (contiguous (av) && (char *) nextchunk >= ((char *) av->top + chunksize(av->top)), 0)) - goto double_free; + { + errstr = "double free or corruption (out)"; + goto errout; + } /* Or whether the block is actually not marked used. */ if (__builtin_expect (!prev_inuse(nextchunk), 0)) - goto double_free; + { + errstr = "double free or corruption (!prev)"; + goto errout; + } nextsize = chunksize(nextchunk); assert(nextsize > 0); diff --git a/sysdeps/unix/sysv/linux/waitid.c b/sysdeps/unix/sysv/linux/waitid.c index 207c3d3..71d5d3a 100644 --- a/sysdeps/unix/sysv/linux/waitid.c +++ b/sysdeps/unix/sysv/linux/waitid.c @@ -17,6 +17,7 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ +#include #include #include #include -- cgit v1.1