If STD_PROP_LIST is explicitly disabled in the constructor, it
should really be disabled.
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);
}
--- /dev/null
+--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"
+}