From 469615bdd422cec2d89a09c765a8e965faa29722 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Thu, 7 Sep 2006 16:06:54 +0000 Subject: [PATCH] [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. --- ChangeLog | 7 +++++++ malloc/arena.c | 2 +- malloc/malloc.c | 3 ++- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 67249ee234..aa8080e57d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2006-09-07 Jakub Jelinek + [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. + [BZ #3155] * sysdeps/powerpc/powerpc32/fpu/s_lrint.S (__lrint): Don't access stack below r1. 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