From c1e5b1345d87b093d415cbd83ac276b99af173f8 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Thu, 7 Aug 2008 11:45:35 +0000 Subject: [PATCH] Fixed bug #45742 (Wrong class array inpretetion using constant indexes) --- Zend/tests/bug45742.phpt | 24 ++++++++++++++++++++++++ Zend/zend_hash.c | 24 ++++++++++++++++++++---- 2 files changed, 44 insertions(+), 4 deletions(-) create mode 100644 Zend/tests/bug45742.phpt 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; } }