Added test case for the bug
zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(arr), &pos);
while (zend_hash_get_current_data_ex(Z_ARRVAL_P(arr), (void **) &tmp, &pos) == SUCCESS) {
- convert_to_string_ex(tmp);
+ SEPARATE_ZVAL(tmp);
+ convert_to_string(*tmp);
smart_str_appendl(&implstr, Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp));
if (++i != numelems) {
--- /dev/null
+--TEST--
+Bug #22224 (implode changes object references in array)
+--INI--
+error_reporting=0
+--FILE--
+<?php
+class foo {
+}
+
+
+$a = new foo();
+
+$arr = array(0=>&$a, 1=>&$a);
+var_dump(implode(",",$arr));
+var_dump($arr)
+?>
+--EXPECT--
+string(13) "Object,Object"
+array(2) {
+ [0]=>
+ &object(foo)(0) {
+ }
+ [1]=>
+ &object(foo)(0) {
+ }
+}