]> granicus.if.org Git - php/commitdiff
Fixed bug #69845 (ArrayObject with ARRAY_AS_PROPS broken)
authorDmitry Stogov <dmitry@zend.com>
Tue, 16 Jun 2015 07:53:53 +0000 (10:53 +0300)
committerDmitry Stogov <dmitry@zend.com>
Tue, 16 Jun 2015 07:53:53 +0000 (10:53 +0300)
NEWS
ext/spl/spl_array.c
ext/spl/tests/bug69845.phpt [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index 5ec887768197c5c928f287278f2fdaf253c519b7..c0c10979ed31c576232857b935dd06adc49d9bad 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -32,6 +32,9 @@ PHP                                                                        NEWS
   . Fixed bug #69752 (PDOStatement::execute() leaks memory with DML
     Statements when closeCuror() is u). (Philip Hofstetter)
 
+- SPL
+  . Fixed bug #69845 (ArrayObject with ARRAY_AS_PROPS broken). (Dmitry)
+
 11 Jun 2015, PHP 7.0.0 Alpha 1
 
 - Core:
index 4ade06a5d818ccd5a428294b5faaae341620262e..70ae05059445c33dea9a949f228ed5e6a782d1d0 100644 (file)
@@ -845,7 +845,7 @@ static zval *spl_array_read_property(zval *object, zval *member, int type, void
        spl_array_object *intern = Z_SPLARRAY_P(object);
 
        if ((intern->ar_flags & SPL_ARRAY_ARRAY_AS_PROPS) != 0
-               && !std_object_handlers.has_property(object, member, 2, cache_slot)) {
+               && !std_object_handlers.has_property(object, member, 2, NULL)) {
                return spl_array_read_dimension(object, member, type, rv);
        }
        return std_object_handlers.read_property(object, member, type, cache_slot, rv);
@@ -856,7 +856,7 @@ static void spl_array_write_property(zval *object, zval *member, zval *value, vo
        spl_array_object *intern = Z_SPLARRAY_P(object);
 
        if ((intern->ar_flags & SPL_ARRAY_ARRAY_AS_PROPS) != 0
-       && !std_object_handlers.has_property(object, member, 2, cache_slot)) {
+       && !std_object_handlers.has_property(object, member, 2, NULL)) {
                spl_array_write_dimension(object, member, value);
                return;
        }
@@ -868,7 +868,7 @@ static zval *spl_array_get_property_ptr_ptr(zval *object, zval *member, int type
        spl_array_object *intern = Z_SPLARRAY_P(object);
 
        if ((intern->ar_flags & SPL_ARRAY_ARRAY_AS_PROPS) != 0
-               && !std_object_handlers.has_property(object, member, 2, cache_slot)) {
+               && !std_object_handlers.has_property(object, member, 2, NULL)) {
                return spl_array_get_dimension_ptr(1, object, member, type);
        }
        //!!! FIXME
@@ -881,7 +881,7 @@ static int spl_array_has_property(zval *object, zval *member, int has_set_exists
        spl_array_object *intern = Z_SPLARRAY_P(object);
 
        if ((intern->ar_flags & SPL_ARRAY_ARRAY_AS_PROPS) != 0
-               && !std_object_handlers.has_property(object, member, 2, cache_slot)) {
+               && !std_object_handlers.has_property(object, member, 2, NULL)) {
                return spl_array_has_dimension(object, member, has_set_exists);
        }
        return std_object_handlers.has_property(object, member, has_set_exists, cache_slot);
@@ -892,7 +892,7 @@ static void spl_array_unset_property(zval *object, zval *member, void **cache_sl
        spl_array_object *intern = Z_SPLARRAY_P(object);
 
        if ((intern->ar_flags & SPL_ARRAY_ARRAY_AS_PROPS) != 0
-               && !std_object_handlers.has_property(object, member, 2, cache_slot)) {
+               && !std_object_handlers.has_property(object, member, 2, NULL)) {
                spl_array_unset_dimension(object, member);
                return;
        }
diff --git a/ext/spl/tests/bug69845.phpt b/ext/spl/tests/bug69845.phpt
new file mode 100644 (file)
index 0000000..db88a8e
--- /dev/null
@@ -0,0 +1,13 @@
+--TEST--
+Fixed bug #69845 (ArrayObject with ARRAY_AS_PROPS broken)
+--FILE--
+<?php
+for ($i = 0; $i<2; $i++) {
+       $data = new \ArrayObject(new stdClass(), ArrayObject::ARRAY_AS_PROPS);
+       $data->itemType = 'bulletin';
+       var_dump(!is_null($data['itemType']));
+}
+?>
+--EXPECT--
+bool(true)
+bool(true)