diff options
| -rw-r--r-- | Zend/tests/bug45742.phpt | 24 | ||||
| -rw-r--r-- | Zend/zend_hash.c | 24 |
2 files changed, 44 insertions, 4 deletions
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-- +<?php +class Constants { + // Needs to be equal + const A = 1; + const B = 1; +} + +class ArrayProperty { + public static $array = array( + Constants::A => 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 b4c8e7a794..5dc314e182 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; } } |
