diff --git a/NEWS b/NEWS index a37bfa30e4bc..f17cbe9efd8d 100644 --- a/NEWS +++ b/NEWS @@ -64,6 +64,10 @@ PHP NEWS . Fixed a heap over-read in the interactive shell prompt when cli.prompt is set to an empty string. (Ilia Alshanetsky) +- Reflection: + . Fixed bug GH-23842 (ReflectionProperty::skipLazyInitialization() copies an + unresolved constant default with opcache). (Lazizbek Ergashev) + - Sockets: . Fixed socket_select() silently truncating sets larger than FD_SETSIZE on Windows. (David Carlier) diff --git a/Zend/tests/lazy_objects/gh23842.phpt b/Zend/tests/lazy_objects/gh23842.phpt new file mode 100644 index 000000000000..fe791dde685b --- /dev/null +++ b/Zend/tests/lazy_objects/gh23842.phpt @@ -0,0 +1,32 @@ +--TEST-- +GH-23842: skipLazyInitialization() copies an unresolved constant default with opcache +--CREDITS-- +DirkTrunkstar +--EXTENSIONS-- +opcache +--INI-- +opcache.enable=1 +opcache.enable_cli=1 +opcache.file_cache_only=0 +--FILE-- +newLazyGhost(function () { + throw new \Exception('initializer'); +}); +$reflector->getProperty('currency')->skipLazyInitialization($product); + +var_dump($product->currency); + +?> +--EXPECT-- +string(3) "EUR" diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c index c7b15c63a0c5..2c94a6e80d18 100644 --- a/ext/reflection/php_reflection.c +++ b/ext/reflection/php_reflection.c @@ -6461,7 +6461,7 @@ ZEND_METHOD(ReflectionProperty, skipLazyInitialization) RETURN_THROWS(); } - zval *src = &object->ce->default_properties_table[OBJ_PROP_TO_NUM(prop->offset)]; + zval *src = &CE_DEFAULT_PROPERTIES_TABLE(object->ce)[OBJ_PROP_TO_NUM(prop->offset)]; zval *dst = OBJ_PROP(object, prop->offset); if (!(Z_PROP_FLAG_P(dst) & IS_PROP_LAZY)) {