summaryrefslogtreecommitdiff
path: root/ext/mysqlnd/mysqlnd_block_alloc.c
diff options
context:
space:
mode:
authorAndrey Hristov <andrey@php.net>2010-05-03 14:16:04 +0000
committerAndrey Hristov <andrey@php.net>2010-05-03 14:16:04 +0000
commitde4a5156e69fe4b5de6ff3146ff4a50f2dec5abb (patch)
tree288009eb0b2a18839b5526d31eb7b66190a9c849 /ext/mysqlnd/mysqlnd_block_alloc.c
parent8fd0407b3ab509796932458e3dd37c6b82952107 (diff)
downloadphp-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.c10
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);
}
/* }}} */