From: Dmitry Stogov Date: Thu, 7 Aug 2008 11:45:00 +0000 (+0000) Subject: Fixed bug #45742 (Wrong class array inpretetion using constant indexes) X-Git-Tag: BEFORE_HEAD_NS_CHANGE~833 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a3d8718b9a418e701c317995bc4bc6d844985e8f;p=php Fixed bug #45742 (Wrong class array inpretetion using constant indexes) --- diff --git a/Zend/tests/bug45742.phpt b/Zend/tests/bug45742.phpt new file mode 100644 index 0000000000..b21e093049 --- /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 67d0588839..d95d2b7d11 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -1674,14 +1674,22 @@ ZEND_API int zend_hash_update_current_key_ex(HashTable *ht, int key_type, zstr s if (mode & HASH_UPDATE_KEY_IF_BEFORE) { break; } else { - zend_hash_index_del(ht, p->h); + if (p->nKeyLength) { + zend_u_hash_del(ht, p->key.type, ZSTR(p->key.arKey.s), 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_u_hash_del(ht, p->key.type, ZSTR(p->key.arKey.s), p->nKeyLength); + } else { + zend_hash_index_del(ht, p->h); + } return FAILURE; } } @@ -1715,14 +1723,22 @@ ZEND_API int zend_hash_update_current_key_ex(HashTable *ht, int key_type, zstr s if (mode & HASH_UPDATE_KEY_IF_BEFORE) { break; } else { - zend_u_hash_del(ht, p->key.type, ZSTR(p->key.arKey.s), p->nKeyLength); + if (p->nKeyLength) { + zend_u_hash_del(ht, p->key.type, ZSTR(p->key.arKey.s), p->nKeyLength); + } else { + zend_hash_index_del(ht, p->h); + } return FAILURE; } } else { if (mode & HASH_UPDATE_KEY_IF_AFTER) { break; } else { - zend_u_hash_del(ht, p->key.type, ZSTR(p->key.arKey.s), p->nKeyLength); + if (p->nKeyLength) { + zend_u_hash_del(ht, p->key.type, ZSTR(p->key.arKey.s), p->nKeyLength); + } else { + zend_hash_index_del(ht, p->h); + } return FAILURE; } }