Skip to content

[pull] master from php:master#771

Merged
pull[bot] merged 2 commits intoturkdevops:masterfrom
php:master
Mar 9, 2026
Merged

[pull] master from php:master#771
pull[bot] merged 2 commits intoturkdevops:masterfrom
php:master

Conversation

@pull
Copy link

@pull pull bot commented Mar 9, 2026

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

Previously, static trait properties would always redeclare locally declared
static properties to make sure any inherited property would stop sharing a
common slot with the parent. This would leave holes in property_info, creating
issues for this code:

    zend_hash_extend(&ce->properties_info,
        zend_hash_num_elements(&ce->properties_info) +
        zend_hash_num_elements(&parent_ce->properties_info), 0);

where zend_hash_num_elements(&ce->properties_info) +
zend_hash_num_elements(&parent_ce->properties_info) is supposed to extend the
hash table enough to hold all additional properties coming from parent. However,
if ce->properties_info contains holes this might not be enough, given all parent
properties are appended at nNumUsed.

This could be fixed by further extending the hash table, but we can also avoid
the holes in properties_info completely by not redeclaring trait properties that
are already declared in the target class. This is now possible because traits
are bound before performing parent class inheritance, so if the property is
already present we know it will separate the property slot.

Fixes GH-20672
Closes GH-21358
* PHP-8.5:
  Fix incorrect property_info sizing for locally shadowed trait properties
@pull pull bot locked and limited conversation to collaborators Mar 9, 2026
@pull pull bot added the ⤵️ pull label Mar 9, 2026
@pull pull bot merged commit cccc548 into turkdevops:master Mar 9, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant