]> granicus.if.org Git - php/commitdiff
Fixed support for constant arrays in context of "const" statement (Zend/tests/constan...
authorDmitry Stogov <dmitry@zend.com>
Wed, 23 Jul 2014 18:47:58 +0000 (22:47 +0400)
committerDmitry Stogov <dmitry@zend.com>
Wed, 23 Jul 2014 18:47:58 +0000 (22:47 +0400)
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index 117e42b3be00954e206817f04e1b050c15295a1c..f7817f8baa478bb09226c0e774bffcb9c5b4e2ff 100644 (file)
@@ -5387,6 +5387,16 @@ ZEND_VM_HANDLER(143, ZEND_DECLARE_CONST, CONST, CONST)
                c.value = *tmp_ptr;
        } else {
                INIT_PZVAL_COPY(&c.value, val);
+               if (Z_TYPE(c.value) == IS_ARRAY) {
+                       HashTable *ht;
+
+                       ALLOC_HASHTABLE(ht);
+                       zend_hash_init(ht, zend_hash_num_elements(Z_ARRVAL(c.value)), NULL, ZVAL_PTR_DTOR, 0);
+                       zend_hash_copy(ht, Z_ARRVAL(c.value), (copy_ctor_func_t) zval_deep_copy, NULL, sizeof(zval *));
+                       Z_ARRVAL(c.value) = ht;
+               } else {
+                       zval_copy_ctor(&c.value);
+               }
                zval_copy_ctor(&c.value);
        }
        c.flags = CONST_CS; /* non persistent, case sensetive */
index 144930e254b1cbf868a122d436e89d84a9c95893..f1aab9a9256ce59902f195e58004e0841cb1521b 100644 (file)
@@ -4323,6 +4323,16 @@ static int ZEND_FASTCALL  ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER(ZEND_OPCOD
                c.value = *tmp_ptr;
        } else {
                INIT_PZVAL_COPY(&c.value, val);
+               if (Z_TYPE(c.value) == IS_ARRAY) {
+                       HashTable *ht;
+
+                       ALLOC_HASHTABLE(ht);
+                       zend_hash_init(ht, zend_hash_num_elements(Z_ARRVAL(c.value)), NULL, ZVAL_PTR_DTOR, 0);
+                       zend_hash_copy(ht, Z_ARRVAL(c.value), (copy_ctor_func_t) zval_deep_copy, NULL, sizeof(zval *));
+                       Z_ARRVAL(c.value) = ht;
+               } else {
+                       zval_copy_ctor(&c.value);
+               }
                zval_copy_ctor(&c.value);
        }
        c.flags = CONST_CS; /* non persistent, case sensetive */