Skip to content

Fix GH-20404: crash when modifying weak references during destruction#22390

Open
khaledalam wants to merge 1 commit into
php:masterfrom
khaledalam:fix-gh20404-weakmap-dtor-reentrancy
Open

Fix GH-20404: crash when modifying weak references during destruction#22390
khaledalam wants to merge 1 commit into
php:masterfrom
khaledalam:fix-gh20404-weakmap-dtor-reentrancy

Conversation

@khaledalam

@khaledalam khaledalam commented Jun 21, 2026

Copy link
Copy Markdown
Contributor

Fixes GH-20404.

zend_weakrefs_notify() cleared weak references by iterating EG(weakrefs) in place. Clearing an entry can run a user destructor that reentrantly registers (grows/reallocates the HT mid-iteration → UAF) or unregisters pending entries.

Reworked to pop one entry at a time, never holding a cursor across user code. Handles both the new-registration crash and the existing nested-WeakMap unregistration path.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Crash when adding object to WeakMap during destruction

1 participant