From: Stanislav Malyshev Date: Thu, 4 Mar 2004 09:18:05 +0000 (+0000) Subject: Handle out of memory/bad size situation gracefully, without getting into loop X-Git-Tag: RELEASE_0_2_0~62 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9731d9f30343b2efae4d3298520eb943f09c8c9c;p=php Handle out of memory/bad size situation gracefully, without getting into loop --- diff --git a/Zend/zend_mm.c b/Zend/zend_mm.c index 1dc57ba0c5..71a24c11ea 100644 --- a/Zend/zend_mm.c +++ b/Zend/zend_mm.c @@ -318,9 +318,15 @@ zend_mm_finished_searching_for_block: if (!best_fit) { if (true_size > (heap->block_size - ZEND_MM_ALIGNED_SEGMENT_SIZE - ZEND_MM_ALIGNED_HEADER_SIZE)) { /* Make sure we add a memory block which is big enough */ - zend_mm_add_memory_block(heap, true_size + ZEND_MM_ALIGNED_SEGMENT_SIZE + ZEND_MM_ALIGNED_HEADER_SIZE); + if (zend_mm_add_memory_block(heap, true_size + ZEND_MM_ALIGNED_SEGMENT_SIZE + ZEND_MM_ALIGNED_HEADER_SIZE)) { + zend_error(E_ERROR, "Out of memory: cannot allocate %d bytes!", true_size); + return NULL; + } } else { - zend_mm_add_memory_block(heap, heap->block_size); + if (zend_mm_add_memory_block(heap, heap->block_size)) { + zend_error(E_ERROR, "Out of memory: cannot allocate %d bytes!", heap->block_size); + return NULL; + } } return zend_mm_alloc(heap, size); }