diff options
author | Andrey Hristov <andrey@php.net> | 2008-09-19 11:38:46 +0000 |
---|---|---|
committer | Andrey Hristov <andrey@php.net> | 2008-09-19 11:38:46 +0000 |
commit | bf20aa12c7ab21e1dbd30e242bb5beb1dde3cc8a (patch) | |
tree | 3eed718ec1a23deb3659b66d6a9aed92efc77aaa | |
parent | ba2f5078717dd281cff419a79145d74dde0e1180 (diff) | |
download | php-git-bf20aa12c7ab21e1dbd30e242bb5beb1dde3cc8a.tar.gz |
MFH:Fix for bug#46019 MySQLi::init() leaks memory
-rw-r--r-- | ext/mysqli/mysqli_api.c | 8 | ||||
-rw-r--r-- | ext/mysqli/tests/bug46109.phpt | 18 |
2 files changed, 25 insertions, 1 deletions
diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c index b8f426ea3d..a3fffb62ba 100644 --- a/ext/mysqli/mysqli_api.c +++ b/ext/mysqli/mysqli_api.c @@ -1311,7 +1311,13 @@ PHP_FUNCTION(mysqli_info) PHP_FUNCTION(mysqli_init) { MYSQLI_RESOURCE *mysqli_resource; - MY_MYSQL *mysql = (MY_MYSQL *)ecalloc(1, sizeof(MY_MYSQL)); + MY_MYSQL *mysql; + + if (getThis() && instanceof_function(Z_OBJCE_P(getThis()), mysqli_link_class_entry TSRMLS_CC)) { + return; + } + + mysql = (MY_MYSQL *)ecalloc(1, sizeof(MY_MYSQL)); #if !defined(MYSQLI_USE_MYSQLND) if (!(mysql->mysql = mysql_init(NULL))) diff --git a/ext/mysqli/tests/bug46109.phpt b/ext/mysqli/tests/bug46109.phpt new file mode 100644 index 0000000000..bbb2903ab6 --- /dev/null +++ b/ext/mysqli/tests/bug46109.phpt @@ -0,0 +1,18 @@ +--TEST-- +Bug #46109 (MySQLi::init - Memory leaks) +--SKIPIF-- +<?php +require_once('skipif.inc'); +require_once('skipifconnectfailure.inc'); +?> +--FILE-- +<?php + include "connect.inc"; + + $mysqli = new mysqli(); + $mysqli->init(); + $mysqli->init(); + echo "done"; +?> +--EXPECTF-- +done |