diff options
author | Dmitry Stogov <dmitry@php.net> | 2011-04-15 12:43:20 +0000 |
---|---|---|
committer | Dmitry Stogov <dmitry@php.net> | 2011-04-15 12:43:20 +0000 |
commit | 50ce16deff058dfbf2a04113e4bad1548521bc64 (patch) | |
tree | d7dec942b0e67b890d111c00470db675978d09d6 /Zend/zend_hash.c | |
parent | 8fe3ea75cb2fc9fe3b6e58340a07aa61f89079b2 (diff) | |
download | php-git-50ce16deff058dfbf2a04113e4bad1548521bc64.tar.gz |
Fixed bug #54268 (Double free when destroy_zend_class fails)
Diffstat (limited to 'Zend/zend_hash.c')
-rw-r--r-- | Zend/zend_hash.c | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index 4ee3cdeb5c..73c45a286c 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -563,9 +563,17 @@ ZEND_API void zend_hash_clean(HashTable *ht) IS_CONSISTENT(ht); - SET_INCONSISTENT(HT_CLEANING); - p = ht->pListHead; + + if (ht->nTableMask) { + memset(ht->arBuckets, 0, ht->nTableSize*sizeof(Bucket *)); + } + ht->pListHead = NULL; + ht->pListTail = NULL; + ht->nNumOfElements = 0; + ht->nNextFreeElement = 0; + ht->pInternalPointer = NULL; + while (p != NULL) { q = p; p = p->pListNext; @@ -577,16 +585,6 @@ ZEND_API void zend_hash_clean(HashTable *ht) } pefree(q, ht->persistent); } - if (ht->nTableMask) { - memset(ht->arBuckets, 0, ht->nTableSize*sizeof(Bucket *)); - } - ht->pListHead = NULL; - ht->pListTail = NULL; - ht->nNumOfElements = 0; - ht->nNextFreeElement = 0; - ht->pInternalPointer = NULL; - - SET_INCONSISTENT(HT_OK); } /* This function is used by the various apply() functions. |