com php-src: Hmm, we should also take care of uninitialized hashTable: Zend/zend_hash.c Zend/zend_hash.h

From: Date: Mon, 10 Aug 2015 09:58:24 +0000
Subject: com php-src: Hmm, we should also take care of uninitialized hashTable: Zend/zend_hash.c Zend/zend_hash.h
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-88630@lists.php.net to get a copy of this message
Commit: 16f2ce8537e1f01f8badb42498a0f0d79b82a444 Author: Xinchen Hui <laruence@php.net> Mon, 10 Aug 2015 17:47:47 +0800 Parents: aa546256e3f3ddf609f5f64ab977650a45652442 Branches: PHP-7.0.0 Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=16f2ce8537e1f01f8badb42498a0f0d79b82a444 Log: Hmm, we should also take care of uninitialized hashTable Changed paths: M Zend/zend_hash.c M Zend/zend_hash.h Diff: diff --git a/Zend/zend_hash.c b/Zend/zend_hash..c index 0d3932e..96ed679 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -807,18 +807,22 @@ static void ZEND_FASTCALL zend_hash_do_resize(HashTable *ht) } } -ZEND_API int ZEND_FASTCALL zend_hash_resize(HashTable *ht, uint32_t size) { +ZEND_API void ZEND_FASTCALL zend_hash_resize(HashTable *ht, uint32_t nSize) { void *old_data = HT_GET_DATA_ADDR(ht); - Bucket *old_buckets = ht->arData; + if (ht->u.flags & HASH_FLAG_INITIALIZED) { + Bucket *old_buckets = ht->arData; - HANDLE_BLOCK_INTERRUPTIONS(); - ht->nTableSize = zend_hash_check_size(size); - ht->nTableMask = -ht->nTableSize; - HT_SET_DATA_ADDR(ht, pemalloc(HT_SIZE(ht), ht->u.flags & HASH_FLAG_PERSISTENT)); - memcpy(ht->arData, old_buckets, sizeof(Bucket) * ht->nNumUsed); - pefree(old_data, ht->u.flags & HASH_FLAG_PERSISTENT); - zend_hash_rehash(ht); - HANDLE_UNBLOCK_INTERRUPTIONS(); + HANDLE_BLOCK_INTERRUPTIONS(); + ht->nTableSize = zend_hash_check_size(nSize); + ht->nTableMask = -ht->nTableSize; + HT_SET_DATA_ADDR(ht, pemalloc(HT_SIZE(ht), ht->u.flags & HASH_FLAG_PERSISTENT)); + memcpy(ht->arData, old_buckets, sizeof(Bucket) * ht->nNumUsed); + pefree(old_data, ht->u.flags & HASH_FLAG_PERSISTENT); + zend_hash_rehash(ht); + HANDLE_UNBLOCK_INTERRUPTIONS(); + } else { + ht->nTableSize = zend_hash_check_size(nSize); + } } ZEND_API int ZEND_FASTCALL zend_hash_rehash(HashTable *ht) diff --git a/Zend/zend_hash.h b/Zend/zend_hash.h index b323096..ae7baa5 100644 --- a/Zend/zend_hash.h +++ b/Zend/zend_hash.h @@ -212,7 +212,7 @@ ZEND_API zval* ZEND_FASTCALL zend_hash_minmax(const HashTable *ht, compare_func_ #define zend_hash_next_free_element(ht) \ (ht)->nNextFreeElement -ZEND_API int ZEND_FASTCALL zend_hash_resize(HashTable *ht, uint32_t size); +ZEND_API void ZEND_FASTCALL zend_hash_resize(HashTable *ht, uint32_t nSize); ZEND_API int ZEND_FASTCALL zend_hash_rehash(HashTable *ht); ZEND_API HashTable* ZEND_FASTCALL zend_array_dup(HashTable *source);

« previous php.cvs (#88630) next »