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