mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
Merge branch 'PHP-8.4'
* PHP-8.4: Fix unstable get_iterator pointer for hooked classes in shm on Windows
This commit is contained in:
commit
fbb97aa6fc
4 changed files with 50 additions and 1 deletions
|
@ -1746,6 +1746,27 @@ ZEND_API inheritance_status zend_verify_property_hook_variance(const zend_proper
|
|||
return zend_perform_covariant_type_check(ce, prop_info->type, ce, value_arg_info->type);
|
||||
}
|
||||
|
||||
#ifdef ZEND_OPCACHE_SHM_REATTACHMENT
|
||||
/* Hooked properties set get_iterator, which causes issues on for shm
|
||||
* reattachment. Avoid early-binding on Windows and set get_iterator during
|
||||
* inheritance. The linked class may not use inheritance cache. */
|
||||
static void zend_link_hooked_object_iter(zend_class_entry *ce) {
|
||||
if (!ce->get_iterator && ce->num_hooked_props) {
|
||||
ce->get_iterator = zend_hooked_object_get_iterator;
|
||||
ce->ce_flags &= ~ZEND_ACC_CACHEABLE;
|
||||
if (CG(current_linking_class) == ce) {
|
||||
# if ZEND_DEBUG
|
||||
/* This check is executed before inheriting any elements that can
|
||||
* track dependencies. */
|
||||
HashTable *ht = (HashTable*)ce->inheritance_cache;
|
||||
ZEND_ASSERT(!ht);
|
||||
# endif
|
||||
CG(current_linking_class) = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
ZEND_API void zend_do_inheritance_ex(zend_class_entry *ce, zend_class_entry *parent_ce, bool checked) /* {{{ */
|
||||
{
|
||||
zend_property_info *property_info;
|
||||
|
@ -3422,7 +3443,7 @@ static zend_class_entry *zend_lazy_class_load(zend_class_entry *pce)
|
|||
return ce;
|
||||
}
|
||||
|
||||
#ifndef ZEND_WIN32
|
||||
#ifndef ZEND_OPCACHE_SHM_REATTACHMENT
|
||||
# define UPDATE_IS_CACHEABLE(ce) do { \
|
||||
if ((ce)->type == ZEND_USER_CLASS) { \
|
||||
is_cacheable &= (ce)->ce_flags; \
|
||||
|
@ -3567,6 +3588,10 @@ ZEND_API zend_class_entry *zend_do_link_class(zend_class_entry *ce, zend_string
|
|||
zend_enum_register_funcs(ce);
|
||||
}
|
||||
|
||||
#ifdef ZEND_OPCACHE_SHM_REATTACHMENT
|
||||
zend_link_hooked_object_iter(ce);
|
||||
#endif
|
||||
|
||||
if (parent) {
|
||||
if (!(parent->ce_flags & ZEND_ACC_LINKED)) {
|
||||
add_dependency_obligation(ce, parent);
|
||||
|
@ -3855,6 +3880,10 @@ ZEND_API zend_class_entry *zend_try_early_bind(zend_class_entry *ce, zend_class_
|
|||
zend_begin_record_errors();
|
||||
}
|
||||
|
||||
#ifdef ZEND_OPCACHE_SHM_REATTACHMENT
|
||||
zend_link_hooked_object_iter(ce);
|
||||
#endif
|
||||
|
||||
zend_do_inheritance_ex(ce, parent_ce, status == INHERITANCE_SUCCESS);
|
||||
if (parent_ce && parent_ce->num_interfaces) {
|
||||
zend_do_inherit_interfaces(ce, parent_ce);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue