georg Thu May 5 09:30:31 2005 EDT Added files: (Branch: PHP_5_0) /php-src/ext/mysqli/tests 064.phpt
Modified files: /php-src NEWS /php-src/ext/mysqli mysqli.c mysqli_api.c Log: MFH: fix for bug #32956 fixed memleak in mysql_close fixed data truncation in test 009.phpt http://cvs.php.net/diff.php/php-src/NEWS?r1=1.1760.2.369&r2=1.1760.2.370&ty=u Index: php-src/NEWS diff -u php-src/NEWS:1.1760.2.369 php-src/NEWS:1.1760.2.370 --- php-src/NEWS:1.1760.2.369 Thu May 5 08:33:56 2005 +++ php-src/NEWS Thu May 5 09:30:30 2005 @@ -10,6 +10,7 @@ - Fixed ext/mysqli to allocate less memory when fetching bound params of type (MEDIUM|LONG)BLOB/(MEDIUM|LONG)TEXT. (Andrey) - Fixed memory corruption in ImageTTFText() with 64bit systems. (Andrey) +- Fixed bug #32956 (mysql_bind_result doesn't support MYSQL_TYPE_NULL). (Georg) - Fixed bug #32947 (Incorrect option for mysqli default password). (Georg) - Fixed bug #32930 (class extending DOMDocument doesn't clone properly). (Rob) - Fixed bug #32852 (Crash with singleton and __destruct when http://cvs.php.net/diff.php/php-src/ext/mysqli/mysqli.c?r1=1.43.2.15&r2=1.43.2.16&ty=u Index: php-src/ext/mysqli/mysqli.c diff -u php-src/ext/mysqli/mysqli.c:1.43.2.15 php-src/ext/mysqli/mysqli.c:1.43.2.16 --- php-src/ext/mysqli/mysqli.c:1.43.2.15 Fri Apr 29 06:22:35 2005 +++ php-src/ext/mysqli/mysqli.c Thu May 5 09:30:31 2005 @@ -15,7 +15,7 @@ | Author: Georg Richter <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ - $Id: mysqli.c,v 1.43.2.15 2005/04/29 10:22:35 andrey Exp $ + $Id: mysqli.c,v 1.43.2.16 2005/05/05 13:30:31 georg Exp $ */ #ifdef HAVE_CONFIG_H @@ -66,7 +66,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); } @@ -129,10 +129,13 @@ if (instanceof_function(intern->zo.ce, mysqli_link_class_entry TSRMLS_CC)) { if (my_res && my_res->ptr) { MY_MYSQL *mysql = (MY_MYSQL *)my_res->ptr; - + mysql_close(mysql->mysql); - php_clear_mysql(mysql); + php_clear_mysql(mysql); + efree(mysql); + + my_res->ptr = NULL; } } else if (intern->zo.ce == mysqli_stmt_class_entry) { /* stmt object */ if (my_res && my_res->ptr) { @@ -512,6 +515,9 @@ /* bind blob support */ REGISTER_LONG_CONSTANT("MYSQLI_NO_DATA", MYSQL_NO_DATA, CONST_CS | CONST_PERSISTENT); +#ifdef MYSQL_DATA_TRUNCATED + REGISTER_LONG_CONSTANT("MYSQLI_DATA_TRUNCATED", MYSQL_DATA_TRUNCATED, CONST_CS | CONST_PERSISTENT); +#endif /* reporting */ REGISTER_LONG_CONSTANT("MYSQLI_REPORT_INDEX", MYSQLI_REPORT_INDEX, CONST_CS | CONST_PERSISTENT); http://cvs.php.net/diff.php/php-src/ext/mysqli/mysqli_api.c?r1=1.87.2.14&r2=1.87.2.15&ty=u Index: php-src/ext/mysqli/mysqli_api.c diff -u php-src/ext/mysqli/mysqli_api.c:1.87.2.14 php-src/ext/mysqli/mysqli_api.c:1.87.2.15 --- php-src/ext/mysqli/mysqli_api.c:1.87.2.14 Wed Apr 27 13:58:53 2005 +++ php-src/ext/mysqli/mysqli_api.c Thu May 5 09:30:31 2005 @@ -15,7 +15,7 @@ | Author: Georg Richter <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ - $Id: mysqli_api.c,v 1.87.2.14 2005/04/27 17:58:53 andrey Exp $ + $Id: mysqli_api.c,v 1.87.2.15 2005/05/05 13:30:31 georg Exp $ */ #ifdef HAVE_CONFIG_H @@ -301,7 +301,14 @@ bind[ofs].is_null = &stmt->result.is_null[ofs]; bind[ofs].buffer_length = stmt->result.buf[ofs].buflen; 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_DATE: case MYSQL_TYPE_TIME: case MYSQL_TYPE_DATETIME: @@ -425,7 +432,9 @@ mysql_close(mysql->mysql); php_clear_mysql(mysql); + efree(mysql); MYSQLI_CLEAR_RESOURCE(&mysql_link); + RETURN_TRUE; } /* }}} */ @@ -618,10 +627,15 @@ memset(stmt->result.buf[i].val, 0, stmt->result.buf[i].buflen); } } - if (!(ret = mysql_stmt_fetch(stmt->stmt))) { + ret = mysql_stmt_fetch(stmt->stmt); +#ifdef MYSQL_DATA_TRUNCATED + if (!ret || ret == MYSQL_DATA_TRUNCATED) { +#else + if (!ret) { +#endif for (i = 0; i < stmt->result.var_cnt; i++) { if (stmt->result.vars[i]->type == IS_STRING && stmt->result.vars[i]->value.str.len) { - efree(stmt->result.vars[i]->value.str.val); + efree(stmt->result.vars[i]->value.str.val); } if (!stmt->result.is_null[i]) { switch (stmt->result.buf[i].type) { @@ -1008,7 +1022,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