From cfcf16f0f7e43d7c9d269adda7cc01d17cbb09cd Mon Sep 17 00:00:00 2001 From: Andrey Hristov Date: Mon, 4 Feb 2008 17:32:43 +0000 Subject: [PATCH] Fix a leak and memory warning. --- ext/mysqli/tests/bug35759.phpt | 4 +++- ext/mysqlnd/mysqlnd_block_alloc.c | 1 + ext/mysqlnd/mysqlnd_result.c | 7 +++---- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/ext/mysqli/tests/bug35759.phpt b/ext/mysqli/tests/bug35759.phpt index b80ef1580d..ca8622d3a8 100644 --- a/ext/mysqli/tests/bug35759.phpt +++ b/ext/mysqli/tests/bug35759.phpt @@ -32,7 +32,9 @@ EOSQL; $stmt = $mysql->prepare("SELECT * FROM blobby"); $stmt->execute(); $stmt->store_result(); - $params= array_pad(array(), $col_num, ""); + for ($i = 0; $i < $col_num; $i++) { + $params[] = &$col_num; + } call_user_func_array(array($stmt, "bind_result"), $params); $stmt->fetch(); diff --git a/ext/mysqlnd/mysqlnd_block_alloc.c b/ext/mysqlnd/mysqlnd_block_alloc.c index ed6e6f7dfd..0bc85b25cc 100644 --- a/ext/mysqlnd/mysqlnd_block_alloc.c +++ b/ext/mysqlnd/mysqlnd_block_alloc.c @@ -186,6 +186,7 @@ mysqlnd_mempool_destroy(MYSQLND_MEMORY_POOL * pool TSRMLS_DC) /* mnd_free will reference LOCK_access and might crash, depending on the caller...*/ mysqlnd_mempool_free_contents(pool TSRMLS_CC); mnd_free(pool->arena); + mnd_free(pool); DBG_VOID_RETURN; } /* }}} */ diff --git a/ext/mysqlnd/mysqlnd_result.c b/ext/mysqlnd/mysqlnd_result.c index 2eb525823a..46d47893e5 100644 --- a/ext/mysqlnd/mysqlnd_result.c +++ b/ext/mysqlnd/mysqlnd_result.c @@ -19,7 +19,6 @@ */ /* $Id$ */ - #include "php.h" #include "mysqlnd.h" #include "mysqlnd_wireprotocol.h" @@ -352,8 +351,6 @@ void mysqlnd_internal_free_result_contents(MYSQLND_RES *result TSRMLS_DC) result->row_packet = NULL; } - result->conn = NULL; - if (result->meta) { result->meta->m->free_metadata(result->meta, FALSE TSRMLS_CC); result->meta = NULL; @@ -375,12 +372,14 @@ static void mysqlnd_internal_free_result(MYSQLND_RES *result TSRMLS_DC) { DBG_ENTER("mysqlnd_internal_free_result"); + + result->m.free_result_contents(result TSRMLS_CC); + if (result->conn) { result->conn->m->free_reference(result->conn TSRMLS_CC); result->conn = NULL; } - result->m.free_result_contents(result TSRMLS_CC); efree(result); DBG_VOID_RETURN; -- 2.40.0