georg Thu May 5 09:02:32 2005 EDT
Added files:
/php-src/ext/mysqli/tests 064.phpt
Modified files:
/php-src/ext/mysqli mysqli.c mysqli_api.c
Log:
fixed memleak in mysqli_close
fixed bug #32956 (mysqli_bind_result doesn't support MYSQL_TYPE_NULL)
http://cvs.php.net/diff.php/php-src/ext/mysqli/mysqli.c?r1=1.67&r2=1.68&ty=u
Index: php-src/ext/mysqli/mysqli.c
diff -u php-src/ext/mysqli/mysqli.c:1.67 php-src/ext/mysqli/mysqli.c:1.68
--- php-src/ext/mysqli/mysqli.c:1.67 Fri Apr 29 06:23:55 2005
+++ php-src/ext/mysqli/mysqli.c Thu May 5 09:02:31 2005
@@ -15,7 +15,7 @@
| Author: Georg Richter <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
- $Id: mysqli.c,v 1.67 2005/04/29 10:23:55 andrey Exp $
+ $Id: mysqli.c,v 1.68 2005/05/05 13:02:31 georg Exp $
*/
#ifdef HAVE_CONFIG_H
@@ -69,7 +69,7 @@
for (i=0; i < bbuf.var_cnt; i++) {
/* free temporary bind buffer */
- if (type == FETCH_RESULT) {
+ if (type == FETCH_RESULT && bbuf.buf[i].val) {
efree(bbuf.buf[i].val);
}
@@ -133,9 +133,14 @@
if (my_res && my_res->ptr) {
MY_MYSQL *mysql = (MY_MYSQL *)my_res->ptr;
- mysql_close(mysql->mysql);
+ if (mysql->mysql) {
+ mysql_close(mysql->mysql);
+ }
+
+ php_clear_mysql(mysql);
+ efree(mysql);
- php_clear_mysql(mysql);
+ my_res->ptr = NULL;
}
} else if (intern->zo.ce == mysqli_stmt_class_entry) { /* stmt object */
if (my_res && my_res->ptr) {
http://cvs.php.net/diff.php/php-src/ext/mysqli/mysqli_api.c?r1=1.107&r2=1.108&ty=u
Index: php-src/ext/mysqli/mysqli_api.c
diff -u php-src/ext/mysqli/mysqli_api.c:1.107
php-src/ext/mysqli/mysqli_api.c:1.108
--- php-src/ext/mysqli/mysqli_api.c:1.107 Wed Apr 27 13:53:15 2005
+++ php-src/ext/mysqli/mysqli_api.c Thu May 5 09:02:31 2005
@@ -15,7 +15,7 @@
| Author: Georg Richter <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
- $Id: mysqli_api.c,v 1.107 2005/04/27 17:53:15 andrey Exp $
+ $Id: mysqli_api.c,v 1.108 2005/05/05 13:02:31 georg Exp $
*/
#ifdef HAVE_CONFIG_H
@@ -277,6 +277,15 @@
bind[ofs].is_null = &stmt->result.is_null[ofs];
break;
+ case MYSQL_TYPE_NULL:
+ stmt->result.buf[ofs].type = IS_NULL;
+ stmt->result.buf[ofs].buflen = 0;
+ bind[ofs].buffer_type = MYSQL_TYPE_NULL;
+ bind[ofs].buffer = 0;
+ bind[ofs].is_null = &stmt->result.is_null[ofs];
+ bind[ofs].buffer_length = 0;
+ break;
+
case MYSQL_TYPE_SHORT:
case MYSQL_TYPE_TINY:
case MYSQL_TYPE_LONG:
@@ -423,7 +432,8 @@
MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
mysql_close(mysql->mysql);
- php_clear_mysql(mysql);
+ php_clear_mysql(mysql);
+ efree(mysql);
MYSQLI_CLEAR_RESOURCE(&mysql_link);
RETURN_TRUE;
}
@@ -1013,7 +1023,7 @@
PHP_FUNCTION(mysqli_init)
{
MYSQLI_RESOURCE *mysqli_resource;
- MY_MYSQL *mysql = (MY_MYSQL *)calloc(1, sizeof(MY_MYSQL));
+ MY_MYSQL *mysql = (MY_MYSQL *)ecalloc(1, sizeof(MY_MYSQL));
if (!(mysql->mysql = mysql_init(NULL))) {
efree(mysql);
http://cvs.php.net/co.php/php-src/ext/mysqli/tests/064.phpt?r=1.1&p=1
Index: php-src/ext/mysqli/tests/064.phpt
+++ php-src/ext/mysqli/tests/064.phpt
--TEST--
NULL binding
--SKIPIF--
<?php require_once('skipif.inc'); ?>
--FILE--
<?php
include "connect.inc";
$mysql = new mysqli($host, $user, $passwd);
$stmt = new mysqli_stmt($mysql, "SELECT NULL FROM DUAL");
$stmt->execute();
$stmt->bind_result($foo);
$stmt->fetch();
$stmt->close();
$mysql->close();
var_dump($foo);
?>
--EXPECT--
NULL
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php