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