mirror of
https://github.com/php/php-src.git
synced 2026-03-24 00:02:20 +01:00
zend_std_get_property_ptr_ptr() was the only property handler that did
not propagate the IN_GET guard to the underlying object when forwarding
from a lazy proxy after initialization. This caused __get to be called
on the underlying object when it shouldn't be, leading to assertion
failures.
The same guard-copying pattern already existed in read_property,
write_property, unset_property, and has_property since commit
26f5009e91 (GH-18039).
Also fixes GH-20873 and GH-20854.
Closes GH-20875
23 lines
419 B
PHP
23 lines
419 B
PHP
--TEST--
|
|
GH-20854 (Assertion in ZEND_RETURN_BY_REF with lazy proxy and return-by-ref __get)
|
|
--FILE--
|
|
<?php
|
|
class C {
|
|
public $prop;
|
|
|
|
function &__get($name) {
|
|
return $this->x;
|
|
}
|
|
}
|
|
|
|
$rc = new ReflectionClass(C::class);
|
|
$obj = $rc->newLazyProxy(function () {
|
|
return new C;
|
|
});
|
|
$obj->x;
|
|
echo "Done\n";
|
|
?>
|
|
--EXPECTF--
|
|
Deprecated: Creation of dynamic property C::$x is deprecated in %s on line %d
|
|
Done
|