summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2019-07-04 15:08:47 +0200
committerNikita Popov <nikita.ppv@gmail.com>2019-07-04 17:12:55 +0200
commit6a9127c100dd6745103ff603ca39fa361431d742 (patch)
tree463906970dcbe5aecf9dfe6dc58c3888a4298b31
parentef05eab432625dd6a2e62055ea7723d64bed593e (diff)
downloadphp-git-6a9127c100dd6745103ff603ca39fa361431d742.tar.gz
Assert that HT entries using add_new APIs are really new
-rw-r--r--Zend/zend_hash.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c
index 3d631526f6..c2c8cf825f 100644
--- a/Zend/zend_hash.c
+++ b/Zend/zend_hash.c
@@ -725,12 +725,13 @@ static zend_always_inline zval *_zend_hash_add_or_update_i(HashTable *ht, zend_s
zend_string_hash_val(key);
}
}
- } else if ((flag & HASH_ADD_NEW) == 0) {
+ } else if ((flag & HASH_ADD_NEW) == 0 || ZEND_DEBUG) {
p = zend_hash_find_bucket(ht, key, 0);
if (p) {
zval *data;
+ ZEND_ASSERT((flag & HASH_ADD_NEW) == 0);
if (flag & HASH_ADD) {
if (!(flag & HASH_UPDATE_INDIRECT)) {
return NULL;
@@ -1012,9 +1013,10 @@ convert_to_hash:
}
zend_hash_real_init_mixed(ht);
} else {
- if ((flag & HASH_ADD_NEW) == 0) {
+ if ((flag & HASH_ADD_NEW) == 0 || ZEND_DEBUG) {
p = zend_hash_index_find_bucket(ht, h);
if (p) {
+ ZEND_ASSERT((flag & HASH_ADD_NEW) == 0);
goto replace;
}
}