diff --git a/Zend/tests/bug45742.phpt b/Zend/tests/bug45742.phpt new file mode 100644 index 00000000000..b21e093049e --- /dev/null +++ b/Zend/tests/bug45742.phpt @@ -0,0 +1,24 @@ +--TEST-- +Bug #45742 Wrong class array inpretetion using constant indexes +--FILE-- + 23, + Constants::B => 42, + ); +} + +var_dump( ArrayProperty::$array ); +?> +--EXPECT-- +array(1) { + [1]=> + int(23) +} diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index b4c8e7a7948..5dc314e1826 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -1197,14 +1197,22 @@ ZEND_API int zend_hash_update_current_key_ex(HashTable *ht, int key_type, const if (mode & HASH_UPDATE_KEY_IF_BEFORE) { break; } else { - zend_hash_index_del(ht, p->h); + if (p->nKeyLength) { + zend_hash_del(ht, p->arKey, p->nKeyLength); + } else { + zend_hash_index_del(ht, p->h); + } return FAILURE; } } else { if (mode & HASH_UPDATE_KEY_IF_AFTER) { break; } else { - zend_hash_index_del(ht, p->h); + if (p->nKeyLength) { + zend_hash_del(ht, p->arKey, p->nKeyLength); + } else { + zend_hash_index_del(ht, p->h); + } return FAILURE; } } @@ -1234,14 +1242,22 @@ ZEND_API int zend_hash_update_current_key_ex(HashTable *ht, int key_type, const if (mode & HASH_UPDATE_KEY_IF_BEFORE) { break; } else { - zend_hash_del(ht, p->arKey, p->nKeyLength); + if (p->nKeyLength) { + zend_hash_del(ht, p->arKey, p->nKeyLength); + } else { + zend_hash_index_del(ht, p->h); + } return FAILURE; } } else { if (mode & HASH_UPDATE_KEY_IF_AFTER) { break; } else { - zend_hash_del(ht, p->arKey, p->nKeyLength); + if (p->nKeyLength) { + zend_hash_del(ht, p->arKey, p->nKeyLength); + } else { + zend_hash_index_del(ht, p->h); + } return FAILURE; } }