]> granicus.if.org Git - php/commitdiff
Fix for bug#46614 Extended MySQLi class gives incorrect empty() result
authorAndrey Hristov <andrey@php.net>
Thu, 27 Aug 2009 12:41:14 +0000 (12:41 +0000)
committerAndrey Hristov <andrey@php.net>
Thu, 27 Aug 2009 12:41:14 +0000 (12:41 +0000)
ext/mysqli/mysqli.c
ext/mysqli/tests/bug46614.phpt [new file with mode: 0644]

index 0c623ae6d98164066ea4aa91ba6e81dcd37ef8bd..bae5a8159e7761c8b13c94857d7caf20052e1c86 100644 (file)
@@ -330,7 +330,6 @@ zval *mysqli_read_property(zval *object, zval *member, int type TSRMLS_DC)
        zval *retval;
        mysqli_object *obj;
        mysqli_prop_handler *hnd;
-       zend_object_handlers *std_hnd;
        int ret;
 
        ret = FAILURE;
@@ -356,7 +355,7 @@ zval *mysqli_read_property(zval *object, zval *member, int type TSRMLS_DC)
                        retval = EG(uninitialized_zval_ptr);
                }
        } else {
-               std_hnd = zend_get_std_object_handlers();
+               zend_object_handlers * std_hnd = zend_get_std_object_handlers();
                retval = std_hnd->read_property(object, member, type TSRMLS_CC);
        }
 
@@ -373,7 +372,6 @@ void mysqli_write_property(zval *object, zval *member, zval *value TSRMLS_DC)
        zval tmp_member;
        mysqli_object *obj;
        mysqli_prop_handler *hnd;
-       zend_object_handlers *std_hnd;
        int ret;
 
        if (member->type != IS_STRING) {
@@ -396,7 +394,7 @@ void mysqli_write_property(zval *object, zval *member, zval *value TSRMLS_DC)
                        zval_ptr_dtor(&value);
                }
        } else {
-               std_hnd = zend_get_std_object_handlers();
+               zend_object_handlers * std_hnd = zend_get_std_object_handlers();
                std_hnd->write_property(object, member, value TSRMLS_CC);
        }
 
@@ -461,6 +459,9 @@ static int mysqli_object_has_property(zval *object, zval *member, int has_set_ex
                        default:
                                php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid value for has_set_exists");        
                }
+       } else {
+               zend_object_handlers * std_hnd = zend_get_std_object_handlers();
+               ret = std_hnd->has_property(object, member, has_set_exists TSRMLS_CC);
        }
        if (member == &tmp_member) {
                zval_dtor(member);
diff --git a/ext/mysqli/tests/bug46614.phpt b/ext/mysqli/tests/bug46614.phpt
new file mode 100644 (file)
index 0000000..84248b1
--- /dev/null
@@ -0,0 +1,32 @@
+--TEST--
+Bug #46614 (Extended MySQLi class gives incorrect empty() result)
+--SKIPIF--
+<?php
+require_once('skipif.inc');
+require_once('skipifconnectfailure.inc');
+if (!defined("MYSQLI_ASYNC")) {
+       die("skip mysqlnd only");
+}
+?>
+--FILE--
+<?php
+class MySQL_Ext extends mysqli{
+       protected $fooData = array();
+       
+       public function isEmpty()
+       {
+               $this->extData[] = 'Bar';
+               return empty($this->extData);
+       }
+}
+
+
+
+       include ("connect.inc");
+       $MySQL_Ext = new MySQL_Ext($host, $user, $passwd, $db);
+
+       $isEmpty = $MySQL_Ext->isEmpty();
+       var_dump($isEmpty);
+?>
+--EXPECT--
+bool(false)