]> granicus.if.org Git - php/commitdiff
Assert that HT entries using add_new APIs are really new
authorNikita Popov <nikita.ppv@gmail.com>
Thu, 4 Jul 2019 13:08:47 +0000 (15:08 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Thu, 4 Jul 2019 15:12:55 +0000 (17:12 +0200)
Zend/zend_hash.c

index 3d631526f65e02bb61c86e8a20b2ee9d1b85418f..c2c8cf825fdcbab09ded8f39434f01932d18cc56 100644 (file)
@@ -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;
                        }
                }