summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/spl/spl_array.c2
-rw-r--r--ext/spl/tests/ArrayObject_std_props_no_recursion.phpt28
2 files changed, 29 insertions, 1 deletions
diff --git a/ext/spl/spl_array.c b/ext/spl/spl_array.c
index df2c7d126a..333830ad9d 100644
--- a/ext/spl/spl_array.c
+++ b/ext/spl/spl_array.c
@@ -92,7 +92,7 @@ static inline HashTable *spl_array_get_hash_table(spl_array_object* intern, int
return intern->std.properties;
} else if (intern->ar_flags & SPL_ARRAY_USE_OTHER) {
spl_array_object *other = Z_SPLARRAY_P(&intern->array);
- return spl_array_get_hash_table(other, check_std_props);
+ return spl_array_get_hash_table(other, 0);
} else {
return HASH_OF(&intern->array);
}
diff --git a/ext/spl/tests/ArrayObject_std_props_no_recursion.phpt b/ext/spl/tests/ArrayObject_std_props_no_recursion.phpt
new file mode 100644
index 0000000000..193e972530
--- /dev/null
+++ b/ext/spl/tests/ArrayObject_std_props_no_recursion.phpt
@@ -0,0 +1,28 @@
+--TEST--
+Don't recurse into USE_OTHER when checking for STD_PROP_LIST
+--FILE--
+<?php
+
+$a = new ArrayObject([1, 2, 3], ArrayObject::STD_PROP_LIST);
+$a->prop = 'a';
+$b = new ArrayObject($a, 0);
+$b->prop = 'b';
+var_dump((array) $b);
+$c = new ArrayObject($a);
+$c->prop = 'c';
+var_dump((array) $c);
+
+?>
+--EXPECT--
+array(3) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+}
+array(1) {
+ ["prop"]=>
+ string(1) "c"
+}