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

Reply via email to