diff options
Diffstat (limited to 'Zend/zend_hash.c')
| -rw-r--r-- | Zend/zend_hash.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index fabdcd00a5..6dc0941c6f 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -101,11 +101,11 @@ ZEND_API void _zend_hash_init(HashTable *ht, uint32_t nSize, dtor_func_t pDestru { /* Use big enough power of 2 */ #ifdef PHP_WIN32 - if (nSize >= 0x80000000) { + if (nSize <= 8) { + ht->nTableSize = 8; + } else if (nSize >= 0x80000000) { /* prevent overflow */ ht->nTableSize = 0x80000000; - } else if (nSize <= 8) { - ht->nTableSize = 8; } else { ht->nTableSize = 1U << __lzcnt(nSize); if (ht->nTableSize < nSize) { @@ -1760,11 +1760,12 @@ ZEND_API int zend_hash_compare(HashTable *ht1, HashTable *ht2, compare_func_t co return result; } } else { /* string indices */ - result = (p1->key ? p1->key->len : 0) - (p2->key ? p2->key->len : 0); - if (result != 0) { + size_t len0 = (p1->key ? p1->key->len : 0); + size_t len1 = (p2->key ? p2->key->len : 0); + if (len0 != len1) { HASH_UNPROTECT_RECURSION(ht1); HASH_UNPROTECT_RECURSION(ht2); - return result; + return len0 > len1 ? 1 : -1; } result = memcmp(p1->key->val, p2->key->val, p1->key->len); if (result != 0) { |
