--- /dev/null
+--TEST--
+Indirect modification of isref by-value return value not possible
+--FILE--
+<?php
+
+class A {
+ public $b;
+}
+
+$arr = [];
+
+$a = new A;
+$a->b =& $arr;
+
+(new ReflectionProperty('A', 'b'))->getValue($a)[] = 42;
+
+var_dump($a);
+
+?>
+--EXPECT--
+object(A)#1 (1) {
+ ["b"]=>
+ &array(0) {
+ }
+}
if (UNEXPECTED(Z_ISREF_P(var_ptr))) {
if (UNEXPECTED(Z_REFCOUNT_P(var_ptr) == 1)) {
ZVAL_UNREF(var_ptr);
+ } else if (!(Z_VAR_FLAGS_P(var_ptr) & IS_VAR_RET_REF)) {
+ Z_DELREF_P(var_ptr);
+ ZVAL_COPY(var_ptr, Z_REFVAL_P(var_ptr));
}
}
if (UNEXPECTED(Z_ISREF_P(var_ptr))) {
if (UNEXPECTED(Z_REFCOUNT_P(var_ptr) == 1)) {
ZVAL_UNREF(var_ptr);
+ } else if (!(Z_VAR_FLAGS_P(var_ptr) & IS_VAR_RET_REF)) {
+ Z_DELREF_P(var_ptr);
+ ZVAL_COPY(var_ptr, Z_REFVAL_P(var_ptr));
}
}