]> granicus.if.org Git - php/commitdiff
Fixed bug #45742 (Wrong class array inpretetion using constant indexes)
authorDmitry Stogov <dmitry@php.net>
Thu, 7 Aug 2008 11:45:00 +0000 (11:45 +0000)
committerDmitry Stogov <dmitry@php.net>
Thu, 7 Aug 2008 11:45:00 +0000 (11:45 +0000)
Zend/tests/bug45742.phpt [new file with mode: 0644]
Zend/zend_hash.c

diff --git a/Zend/tests/bug45742.phpt b/Zend/tests/bug45742.phpt
new file mode 100644 (file)
index 0000000..b21e093
--- /dev/null
@@ -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)
+}
index 67d0588839dd4165a0ab9d7df288889aca07b3be..d95d2b7d11c0ff0082b50bee3fe4600fb83d5bdc 100644 (file)
@@ -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;
                                                }
                                                }