diff options
-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 0dba9f39de..fcb51f6a2f 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -408,13 +408,14 @@ static zend_always_inline Bucket *zend_hash_find_bucket(const HashTable *ht, zen arData = ht->arData; nIndex = h | ht->nTableMask; idx = HT_HASH_EX(arData, nIndex); - while (idx != HT_INVALID_IDX) { + while (EXPECTED(idx != HT_INVALID_IDX)) { p = HT_HASH_TO_BUCKET_EX(arData, idx); - if (p->key == key || /* check for the the same interned string */ - (p->h == h && - p->key && - p->key->len == key->len && - memcmp(p->key->val, key->val, key->len) == 0)) { + if (EXPECTED(p->key == key)) { /* check for the the same interned string */ + return p; + } else if (EXPECTED(p->h == h) && + EXPECTED(p->key) && + EXPECTED(p->key->len == key->len) && + EXPECTED(memcmp(p->key->val, key->val, key->len) == 0)) { return p; } idx = Z_NEXT(p->val); |