From: Andrey Hristov Date: Wed, 24 Mar 2010 15:17:57 +0000 (+0000) Subject: Fix a segfault when using a mysqli object after unsuccesssful connect, the X-Git-Tag: php-5.3.3RC1~371 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=78887ff757bc7eedd6537706880d8b7246b8a7d3;p=php Fix a segfault when using a mysqli object after unsuccesssful connect, the handle should have been allocated with mysqli_init(). --- diff --git a/ext/mysqli/mysqli_nonapi.c b/ext/mysqli/mysqli_nonapi.c index b3b0dded08..34fec47d40 100644 --- a/ext/mysqli/mysqli_nonapi.c +++ b/ext/mysqli/mysqli_nonapi.c @@ -69,6 +69,7 @@ void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_conne zend_bool new_connection = FALSE; zend_rsrc_list_entry *le; mysqli_plist_entry *plist = NULL; + zend_bool self_alloced = 0; #if !defined(MYSQL_USE_MYSQLND) @@ -99,6 +100,7 @@ void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_conne } if (!mysql) { mysql = (MY_MYSQL *) ecalloc(1, sizeof(MY_MYSQL)); + self_alloced = 1; } flags |= CLIENT_MULTI_RESULTS; /* needed for mysql_multi_query() */ } else { @@ -243,6 +245,7 @@ void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_conne if (!is_real_connect) { /* free mysql structure */ mysqli_close(mysql->mysql, MYSQLI_CLOSE_DISCONNECTED); + mysql->mysql = NULL; } goto err; } @@ -292,7 +295,7 @@ err: mysql->hash_key = NULL; mysql->persistent = FALSE; } - if (!is_real_connect) { + if (!is_real_connect && self_alloced) { efree(mysql); } RETVAL_FALSE;