From 3e4c22b4998295b05eebb1ee080585b71b64be75 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Thu, 6 Mar 2014 16:53:13 +0400 Subject: [PATCH] Fixed possible HashTable modification in its destructor --- Zend/zend_hash.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index 0f424cb8eb..b189599b32 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -508,13 +508,17 @@ static zend_always_inline void _zend_hash_del_el_ex(HashTable *ht, uint idx, Buc } } } - if (ht->pDestructor) { - ht->pDestructor(&p->val); - } if (p->key) { STR_RELEASE(p->key); } - Z_TYPE(p->val) = IS_UNDEF; + if (ht->pDestructor) { + zval tmp; + ZVAL_COPY_VALUE(&tmp, &p->val); + ZVAL_UNDEF(&p->val); + ht->pDestructor(&tmp); + } else { + ZVAL_UNDEF(&p->val); + } } static zend_always_inline void _zend_hash_del_el(HashTable *ht, uint idx, Bucket *p) -- 2.40.0