summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrey Hristov <andrey@php.net>2008-09-19 11:38:46 +0000
committerAndrey Hristov <andrey@php.net>2008-09-19 11:38:46 +0000
commitbf20aa12c7ab21e1dbd30e242bb5beb1dde3cc8a (patch)
tree3eed718ec1a23deb3659b66d6a9aed92efc77aaa
parentba2f5078717dd281cff419a79145d74dde0e1180 (diff)
downloadphp-git-bf20aa12c7ab21e1dbd30e242bb5beb1dde3cc8a.tar.gz
MFH:Fix for bug#46019 MySQLi::init() leaks memory
-rw-r--r--ext/mysqli/mysqli_api.c8
-rw-r--r--ext/mysqli/tests/bug46109.phpt18
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