com php-src: Fixed support for constant arrays in context of "const" statement (Zend/tests/constant_expressions_arrays.phpt failed when
opcache.protect_memort was set): Zend/zend_vm_def.h Zend/zend_vm_execute.h

From: Date: Wed, 23 Jul 2014 18:47:58 +0000
Subject: com php-src: Fixed support for constant arrays in context of "const" statement (Zend/tests/constant_expressions_arrays.phpt failed when
opcache.protect_memort was set): Zend/zend_vm_def.h Zend/zend_vm_execute.h
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-79569@lists.php.net to get a copy of this message
Commit: c49a06168ed3759779452e2b2a44da22e75a0702 Author: Dmitry Stogov <dmitry@zend.com> Wed, 23 Jul 2014 22:47:58 +0400 Parents: a6ecb873b9138f4334271c6da3b9c5a6f9f3e490 Branches: PHP-5.6 master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=c49a06168ed3759779452e2b2a44da22e75a0702 Log: Fixed support for constant arrays in context of "const" statement (Zend/tests/constant_expressions_arrays.phpt failed when opcache.protect_memort was set) Changed paths: M Zend/zend_vm_def.h M Zend/zend_vm_execute.h Diff: diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 117e42b..f7817f8 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -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 */ diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 144930e..f1aab9a 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -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 */

« previous php.cvs (#79569) next »