diff options
| author | Andrey Hristov <andrey@php.net> | 2010-05-03 14:16:04 +0000 | 
|---|---|---|
| committer | Andrey Hristov <andrey@php.net> | 2010-05-03 14:16:04 +0000 | 
| commit | de4a5156e69fe4b5de6ff3146ff4a50f2dec5abb (patch) | |
| tree | 288009eb0b2a18839b5526d31eb7b66190a9c849 /ext/mysqlnd/mysqlnd_block_alloc.c | |
| parent | 8fd0407b3ab509796932458e3dd37c6b82952107 (diff) | |
| download | php-git-de4a5156e69fe4b5de6ff3146ff4a50f2dec5abb.tar.gz | |
Handle OOM when resizing blocks during data fetch
Diffstat (limited to 'ext/mysqlnd/mysqlnd_block_alloc.c')
| -rw-r--r-- | ext/mysqlnd/mysqlnd_block_alloc.c | 10 | 
1 files changed, 8 insertions, 2 deletions
diff --git a/ext/mysqlnd/mysqlnd_block_alloc.c b/ext/mysqlnd/mysqlnd_block_alloc.c index 41c3af6f06..498d4b390b 100644 --- a/ext/mysqlnd/mysqlnd_block_alloc.c +++ b/ext/mysqlnd/mysqlnd_block_alloc.c @@ -53,7 +53,7 @@ mysqlnd_mempool_free_chunk(MYSQLND_MEMORY_POOL_CHUNK * chunk, zend_bool cache_it  /* {{{ mysqlnd_mempool_resize_chunk */ -static void +static enum_func_status  mysqlnd_mempool_resize_chunk(MYSQLND_MEMORY_POOL_CHUNK * chunk, unsigned int size TSRMLS_DC)  {  	DBG_ENTER("mysqlnd_mempool_resize_chunk"); @@ -68,6 +68,9 @@ mysqlnd_mempool_resize_chunk(MYSQLND_MEMORY_POOL_CHUNK * chunk, unsigned int siz  			if ((chunk->size + pool->free_size) < size) {  				zend_uchar *new_ptr;  				new_ptr = mnd_malloc(size); +				if (!new_ptr) { +					DBG_RETURN(FAIL); +				}  				memcpy(new_ptr, chunk->ptr, chunk->size);  				chunk->ptr = new_ptr;  				pool->free_size += chunk->size; @@ -85,6 +88,9 @@ mysqlnd_mempool_resize_chunk(MYSQLND_MEMORY_POOL_CHUNK * chunk, unsigned int siz  			} else {  				zend_uchar *new_ptr;  				new_ptr = mnd_malloc(size); +				if (!new_ptr) { +					DBG_RETURN(FAIL); +				}  				memcpy(new_ptr, chunk->ptr, chunk->size);  				chunk->ptr = new_ptr;  				chunk->size = size; @@ -95,7 +101,7 @@ mysqlnd_mempool_resize_chunk(MYSQLND_MEMORY_POOL_CHUNK * chunk, unsigned int siz  	} else {  		chunk->ptr = mnd_realloc(chunk->ptr, size);  	} -	DBG_VOID_RETURN; +	DBG_RETURN(PASS);  }  /* }}} */  | 
