]> granicus.if.org Git - php/commit
Fix symtable cache being used while cleaning symtable
authorNikita Popov <nikita.ppv@gmail.com>
Mon, 15 Feb 2021 13:52:38 +0000 (14:52 +0100)
committerNikita Popov <nikita.ppv@gmail.com>
Mon, 15 Feb 2021 13:58:38 +0000 (14:58 +0100)
commit7b7d99839c2e2886ecf159952552c9964bd80481
tree23479c2d0817b804f665f02ebb265d4a6a915cc6
parent3646604203d80bc0f6a124aa2ac5c448229327ea
Fix symtable cache being used while cleaning symtable

We need to first clean the symtable and then check whether a cache
slot is available for it. Otherwise, it may happen that a destructor
runs while cleaning the table and uses up all the remaining slots
in the cache.

This is particularly insidious because once we overflow the cache,
the first pointer we modify is symtable_cache_ptr, making it hard
to understand what happened after the fact.

Fixes oss-fuzz #30815.
Zend/tests/symtable_cache_recursive_dtor.phpt [new file with mode: 0644]
Zend/zend_execute.c