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

Reply via email to