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
24 lines
385 B
PHP
24 lines
385 B
PHP
--TEST--
|
|
GH-20875 (Lazy proxy should not initialize when __get handles dynamic property access)
|
|
--FILE--
|
|
<?php
|
|
|
|
class Foo {
|
|
public $_;
|
|
|
|
public function &__get($name) {
|
|
echo "__get\n";
|
|
return $name;
|
|
}
|
|
}
|
|
|
|
$proxy = (new ReflectionClass(Foo::class))->newLazyProxy(function () {
|
|
echo "init\n";
|
|
return new Foo();
|
|
});
|
|
$x = &$proxy->x;
|
|
|
|
?>
|
|
--EXPECT--
|
|
__get
|