]> granicus.if.org Git - php/commitdiff
Fix crashes in the allocator in case of OOM.
authorAndrey Hristov <andrey@php.net>
Thu, 27 May 2010 12:00:48 +0000 (12:00 +0000)
committerAndrey Hristov <andrey@php.net>
Thu, 27 May 2010 12:00:48 +0000 (12:00 +0000)
ext/mysqlnd/mysqlnd_debug.c

index 232104a89b9288ed6f7accf54ed6d4b9c0beb193..4ec5a7e99e94887c89dfebf0cef5afe950a6a073 100644 (file)
@@ -932,7 +932,7 @@ void * _mysqlnd_malloc(size_t size MYSQLND_MEM_D)
 #endif
 
        DBG_INF_FMT("size=%lu ptr=%p", size, ret);
-       if (collect_memory_statistics) {
+       if (ret && collect_memory_statistics) {
                *(size_t *) ret = size;
                MYSQLND_INC_GLOBAL_STATISTIC_W_VALUE2(STAT_MEM_MALLOC_COUNT, 1, STAT_MEM_MALLOC_AMOUNT, size);
        }
@@ -963,7 +963,7 @@ void * _mysqlnd_calloc(unsigned int nmemb, size_t size MYSQLND_MEM_D)
 #endif
 
        DBG_INF_FMT("size=%lu ptr=%p", size, ret);
-       if (collect_memory_statistics) {
+       if (ret && collect_memory_statistics) {
                *(size_t *) ret = size;
                MYSQLND_INC_GLOBAL_STATISTIC_W_VALUE2(STAT_MEM_CALLOC_COUNT, 1, STAT_MEM_CALLOC_AMOUNT, size);
        }
@@ -997,7 +997,7 @@ void * _mysqlnd_realloc(void *ptr, size_t new_size MYSQLND_MEM_D)
 
        DBG_INF_FMT("new_ptr=%p", (char*)ret);
 
-       if (collect_memory_statistics) {
+       if (ret && collect_memory_statistics) {
                *(size_t *) ret = new_size;
                MYSQLND_INC_GLOBAL_STATISTIC_W_VALUE2(STAT_MEM_REALLOC_COUNT, 1, STAT_MEM_REALLOC_AMOUNT, new_size);
        }
@@ -1082,7 +1082,7 @@ char * _mysqlnd_pestrdup(const char * const ptr, zend_bool persistent MYSQLND_ME
        ret = pemalloc(tmp_str.len + sizeof(size_t), persistent);
        memcpy(FAKE_PTR(ret), tmp_str.c, tmp_str.len);
 
-       if (collect_memory_statistics) {
+       if (ret && collect_memory_statistics) {
                *(size_t *) ret = tmp_str.len;
                MYSQLND_INC_GLOBAL_STATISTIC(persistent? STAT_MEM_STRDUP_COUNT : STAT_MEM_ESTRDUP_COUNT);
        }