]> granicus.if.org Git - php/commitdiff
Avoid array duplication
authorDmitry Stogov <dmitry@zend.com>
Tue, 25 Aug 2015 19:40:33 +0000 (22:40 +0300)
committerDmitry Stogov <dmitry@zend.com>
Tue, 25 Aug 2015 19:40:33 +0000 (22:40 +0300)
Zend/zend_operators.c

index 77916f25a3c7838ab64ba8be7ad14091dabfc411..b88a01731e49dcba9f5aebcd36f07fe18b8c16f7 100644 (file)
@@ -642,10 +642,12 @@ try_again:
        switch (Z_TYPE_P(op)) {
                case IS_ARRAY:
                        {
-                               zval tmp;
-                               ZVAL_COPY_VALUE(&tmp, op);
-                               SEPARATE_ARRAY(&tmp);
-                               object_and_properties_init(op, zend_standard_class_def, Z_ARR(tmp));
+                               HashTable *ht = Z_ARR_P(op);
+                               if (Z_IMMUTABLE_P(op)) {
+                                       /* TODO: try not to duplicate immutable arrays as well ??? */
+                                       ht = zend_array_dup(ht);
+                               }
+                               object_and_properties_init(op, zend_standard_class_def, ht);
                                break;
                        }
                case IS_OBJECT: