summaryrefslogtreecommitdiff
path: root/Zend/zend_hash.c
diff options
context:
space:
mode:
Diffstat (limited to 'Zend/zend_hash.c')
-rw-r--r--Zend/zend_hash.c13
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) {