]> granicus.if.org Git - php/commitdiff
define() must not modify the source array
authorDmitry Stogov <dmitry@zend.com>
Thu, 22 Jan 2015 12:49:38 +0000 (15:49 +0300)
committerDmitry Stogov <dmitry@zend.com>
Thu, 22 Jan 2015 12:49:38 +0000 (15:49 +0300)
Zend/tests/constant_arrays.phpt
Zend/zend_builtin_functions.c

index 834c12606e3fdaf2aa40b65294fa7ea52d01c307..5bb8717604a214bf69acc6b8883581ce915312a8 100644 (file)
@@ -85,7 +85,7 @@ array(4) {
 int(3)
 array(1) {
   [0]=>
-  int(3)
+  &int(3)
 }
 array(1) {
   [0]=>
index 6b73bf344d159a71775d11a6f39ea53ba6237d86..f5dd831cd496be20d5296cb2096e2d44d9f1ba8e 100644 (file)
@@ -746,14 +746,7 @@ static void copy_constant_array(zval *dst, zval *src) /* {{{ */
        array_init_size(dst, zend_hash_num_elements(Z_ARRVAL_P(src)));
        ZEND_HASH_FOREACH_KEY_VAL_IND(Z_ARRVAL_P(src), idx, key, val) {
                /* constant arrays can't contain references */
-               if (Z_ISREF_P(val)) {
-                       if (Z_REFCOUNT_P(val) == 1) {
-                               ZVAL_UNREF(val);
-                       } else {
-                               Z_DELREF_P(val);
-                               val = Z_REFVAL_P(val);
-                       }
-               }
+               ZVAL_DEREF(val);
                if (key) {
                        new_val = zend_hash_add_new(Z_ARRVAL_P(dst), key, val);
                } else {