]> granicus.if.org Git - php/commitdiff
Fix a leak, memory warning and failing test case.
authorAndrey Hristov <andrey@php.net>
Mon, 4 Feb 2008 17:33:46 +0000 (17:33 +0000)
committerAndrey Hristov <andrey@php.net>
Mon, 4 Feb 2008 17:33:46 +0000 (17:33 +0000)
ext/mysqli/tests/bug35759.phpt
ext/mysqlnd/mysqlnd_block_alloc.c
ext/mysqlnd/mysqlnd_result.c

index b80ef1580d029b2722420b6ae8cc3b49963ef6ef..ca8622d3a8edcdc72db08ff9e040e587ef80cc16 100644 (file)
@@ -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();
        
index ed6e6f7dfd5a81418d62bb76d92a653a814132bc..0bc85b25ccb5ab864fd8dcaf4147d9a5d5a9b836 100644 (file)
@@ -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;
 }
 /* }}} */
index 622e4968ec07a6d8fe71f4b014f5808cf110553e..46d47893e5240a2cc199458f23d67fae611cb401 100644 (file)
@@ -351,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;
@@ -374,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;