summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXinchen Hui <laruence@php.net>2013-04-27 23:38:10 +0800
committerXinchen Hui <laruence@php.net>2013-04-27 23:38:10 +0800
commitd54432ed98e1ba563677d40f32f5bb10124478af (patch)
treea1a0813215548b49af99052103dc3b224c16a09b
parente9b03c412ba44826de2c8150c7a930fe9aa17074 (diff)
parentc7b8368ed579ddd539af95427902215f0530b4ea (diff)
downloadphp-git-d54432ed98e1ba563677d40f32f5bb10124478af.tar.gz
Merge branch 'PHP-5.3' into PHP-5.4
-rw-r--r--ext/mysqli/tests/bug64726.phpt23
-rw-r--r--ext/mysqlnd/mysqlnd_result.c1
2 files changed, 24 insertions, 0 deletions
diff --git a/ext/mysqli/tests/bug64726.phpt b/ext/mysqli/tests/bug64726.phpt
new file mode 100644
index 0000000000..3e43916d35
--- /dev/null
+++ b/ext/mysqli/tests/bug64726.phpt
@@ -0,0 +1,23 @@
+--TEST--
+Bug #63398 (Memleak when calling fetch_object on a use_result and DB pointer has closed)
+--SKIPIF--
+<?php
+require_once('skipif.inc');
+require_once("connect.inc");
+if (!$IS_MYSQLND) {
+ die("skip mysqlnd only test");
+}
+require_once('skipifconnectfailure.inc');
+?>
+--FILE--
+<?php
+require 'connect.inc';
+$db = new my_mysqli($host, $user, $passwd, $db, $port, $socket);
+
+$result = $db->query('SELECT 1', MYSQLI_USE_RESULT);
+$db->close();
+var_dump($result->fetch_array());
+?>
+--EXPECTF--
+Warning: mysqli_result::fetch_array(): Error while reading a row in %sbug64726.php on line %d
+bool(false)
diff --git a/ext/mysqlnd/mysqlnd_result.c b/ext/mysqlnd/mysqlnd_result.c
index 2e289062a9..a857a05d71 100644
--- a/ext/mysqlnd/mysqlnd_result.c
+++ b/ext/mysqlnd/mysqlnd_result.c
@@ -1510,6 +1510,7 @@ MYSQLND_METHOD(mysqlnd_res, fetch_into)(MYSQLND_RES * result, unsigned int flags
mysqlnd_array_init(return_value, mysqlnd_num_fields(result) * 2);
if (FAIL == result->m.fetch_row(result, (void *)return_value, flags, &fetched_anything TSRMLS_CC)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error while reading a row");
+ zval_dtor(return_value);
RETVAL_FALSE;
} else if (fetched_anything == FALSE) {
zval_dtor(return_value);