Skip to content

[pull] master from php:master#825

Merged
pull[bot] merged 7 commits into
dolfly:masterfrom
php:master
Jun 15, 2026
Merged

[pull] master from php:master#825
pull[bot] merged 7 commits into
dolfly:masterfrom
php:master

Conversation

@pull

@pull pull Bot commented Jun 15, 2026

Copy link
Copy Markdown

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 : )

iliaal and others added 7 commits June 15, 2026 07:33
…store

spl_array_method() caches the backing HashTable pointer across a
user-supplied comparator (uasort/uksort and the sort handlers). The
comparator can re-enter __construct() or __unserialize(), which route
through spl_array_set_array() and swap intern->array out from under the
cached pointer, leaving the post-sort cleanup to release and dereference
freed memory. Mirror the nApplyCount guard the other mutators already
use so replacing the backing store during a sort throws instead.

Closes GH-22310
* PHP-8.4:
  Fix use-after-free when ArrayObject sort comparator replaces backing store
* PHP-8.5:
  Fix use-after-free when ArrayObject sort comparator replaces backing store
…ing (#22221)

Inheritance cache dependencies are collected while a class is being
linked. During delayed variance resolution, autoloading can re-enter
class linking and use the current class while it is only nearly linked.
If that class is persisted in the inheritance cache, a later request
can replay dependencies in a different order and observe an incomplete
hierarchy.

When delayed autoloading causes the class to be used through the
unlinked/nearly-linked lookup path, mark it as non-cacheable after
load_delayed_classes() returns. This also catches cases where the
class's variance obligations were resolved reentrantly, before the
direct resolve_delayed_variance_obligations() call would run.

If dependency tracking already allocated a temporary dependency table,
free it when cache insertion is skipped. Restrict this cleanup to
classes that entered inheritance-cache construction, because otherwise
inheritance_cache is not a dependency table and may contain unrelated
or uninitialized data. This preserves inheritance-cache use for
delayed-variance classes that did not participate in this reentrant
cycle.

With the invalid cache entry prevented, unlinked_instanceof() can keep
using instanceof_function() for linked classes.
* PHP-8.4:
  fix GH-20469: unsafe inheritance cache replay with reentrant autoloading (#22221)
* PHP-8.5:
  Update NEWS for PR 22221
  fix GH-20469: unsafe inheritance cache replay with reentrant autoloading (#22221)
@pull pull Bot locked and limited conversation to collaborators Jun 15, 2026
@pull pull Bot added the ⤵️ pull label Jun 15, 2026
@pull pull Bot merged commit 3bb6e55 into dolfly:master Jun 15, 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.

2 participants