diff options
author | Ulrich Drepper <drepper@redhat.com> | 2004-10-30 18:04:21 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2004-10-30 18:04:21 +0000 |
commit | 73f6403bd41388e22727bd2943c0c78cfed0b4da (patch) | |
tree | 50f527ca8f62cf2cf122b0149aa131a6bc65831e /malloc | |
parent | 543fb0c8d48e9eb9b0f59c37f2f8543bd8c4bac3 (diff) | |
download | glibc-73f6403bd41388e22727bd2943c0c78cfed0b4da.tar.gz glibc-73f6403bd41388e22727bd2943c0c78cfed0b4da.tar.xz glibc-73f6403bd41388e22727bd2943c0c78cfed0b4da.zip |
Update.
2004-10-30 Andreas Schwab <schwab@suse.de> * sysdeps/unix/sysv/linux/waitid.c: Include <stddef.h> for NULL. 2004-10-30 Ulrich Drepper <drepper@redhat.com> * malloc/malloc.c (_int_free): Use unique comments for the error cases.
Diffstat (limited to 'malloc')
-rw-r--r-- | malloc/malloc.c | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/malloc/malloc.c b/malloc/malloc.c index 2e91952a26..6d6294c6e6 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); |