diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | malloc/arena.c | 2 | ||||
-rw-r--r-- | malloc/malloc.c | 3 |
3 files changed, 10 insertions, 2 deletions
@@ -1,5 +1,12 @@ 2006-09-07 Jakub Jelinek <jakub@redhat.com> + [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 6f4b0c4..2179174 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 206f3e1..a369001 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 |