aboutsummaryrefslogtreecommitdiff
path: root/malloc
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2006-09-07 16:06:54 +0000
committerUlrich Drepper <drepper@redhat.com>2006-09-07 16:06:54 +0000
commit469615bdd422cec2d89a09c765a8e965faa29722 (patch)
treefa9d9c80c22d4a88d0c0d94e1e9c2cbb982c494c /malloc
parentba40cc1540f5ee1e2082bd31b0e602a62ea3273f (diff)
downloadglibc-469615bdd422cec2d89a09c765a8e965faa29722.tar
glibc-469615bdd422cec2d89a09c765a8e965faa29722.tar.gz
glibc-469615bdd422cec2d89a09c765a8e965faa29722.tar.bz2
glibc-469615bdd422cec2d89a09c765a8e965faa29722.zip
[BZ #2775]
* malloc/malloc.c (sYSMALLOc): Only call grow_heap if (long) (MINSIZE + nb - old_size) is positive. * malloc/arena.c (grow_heap): When growing bail even if new_size is negative.
Diffstat (limited to 'malloc')
-rw-r--r--malloc/arena.c2
-rw-r--r--malloc/malloc.c3
2 files changed, 3 insertions, 2 deletions
diff --git a/malloc/arena.c b/malloc/arena.c
index 6f4b0c497b..2179174d64 100644
--- a/malloc/arena.c
+++ b/malloc/arena.c
@@ -712,7 +712,7 @@ grow_heap(h, diff) heap_info *h; long diff;
if(diff >= 0) {
diff = (diff + page_mask) & ~page_mask;
new_size = (long)h->size + diff;
- if(new_size > HEAP_MAX_SIZE)
+ if((unsigned long) new_size > (unsigned long) HEAP_MAX_SIZE)
return -1;
if(mprotect((char *)h + h->size, diff, PROT_READ|PROT_WRITE) != 0)
return -2;
diff --git a/malloc/malloc.c b/malloc/malloc.c
index 206f3e1b6a..a369001520 100644
--- a/malloc/malloc.c
+++ b/malloc/malloc.c
@@ -2970,7 +2970,8 @@ static Void_t* sYSMALLOc(nb, av) INTERNAL_SIZE_T nb; mstate av;
/* First try to extend the current heap. */
old_heap = heap_for_ptr(old_top);
old_heap_size = old_heap->size;
- if (grow_heap(old_heap, MINSIZE + nb - old_size) == 0) {
+ if ((long) (MINSIZE + nb - old_size) > 0
+ && grow_heap(old_heap, MINSIZE + nb - old_size) == 0) {
av->system_mem += old_heap->size - old_heap_size;
arena_mem += old_heap->size - old_heap_size;
#if 0