]> granicus.if.org Git - php/commitdiff
Fixed bug #30140 (Problem with array in static properties)
authorDmitry Stogov <dmitry@php.net>
Wed, 8 Jun 2005 13:21:28 +0000 (13:21 +0000)
committerDmitry Stogov <dmitry@php.net>
Wed, 8 Jun 2005 13:21:28 +0000 (13:21 +0000)
Zend/tests/bug30140.phpt [new file with mode: 0755]
Zend/zend_execute_API.c

diff --git a/Zend/tests/bug30140.phpt b/Zend/tests/bug30140.phpt
new file mode 100755 (executable)
index 0000000..1dfb835
--- /dev/null
@@ -0,0 +1,30 @@
+--TEST--
+Bug #30140 (Problem with array in static properties)
+--FILE--
+<?php
+class A {
+       public static $test1 = true;
+       public static $test2 = array();
+       public static $test3 = "str";
+}
+
+class B extends A {
+}
+
+A::$test1 = "x";
+A::$test2 = "y";
+A::$test3 = "z";
+var_dump(A::$test1);
+var_dump(A::$test2);
+var_dump(A::$test3);
+var_dump(B::$test1);
+var_dump(B::$test2);
+var_dump(B::$test3);
+?>
+--EXPECT--
+string(1) "x"
+string(1) "y"
+string(1) "z"
+string(1) "x"
+string(1) "y"
+string(1) "z"
index 0bfb3ff18a97dca0980e65eee1ac9aa615c5af6d..b37b0f61199a5bc26fc54ff6db18c7f1dd093f1d 100644 (file)
@@ -426,11 +426,13 @@ ZEND_API int zval_update_constant(zval **pp, void *arg TSRMLS_DC)
 
        if (p->type == IS_CONSTANT) {
                int refcount;
+               zend_uchar is_ref;
 
-               SEPARATE_ZVAL(pp);
+               SEPARATE_ZVAL_IF_NOT_REF(pp);
                p = *pp;
 
                refcount = p->refcount;
+               is_ref = p->is_ref;
 
                if (!zend_get_constant(p->value.str.val, p->value.str.len, &const_value TSRMLS_CC)) {
                        zend_error(E_NOTICE, "Use of undefined constant %s - assumed '%s'",
@@ -447,15 +449,15 @@ ZEND_API int zval_update_constant(zval **pp, void *arg TSRMLS_DC)
                        *p = const_value;
                }
 
-               INIT_PZVAL(p);
                p->refcount = refcount;
+               p->is_ref = is_ref;
        } else if (p->type == IS_CONSTANT_ARRAY) {
                zval **element, *new_val;
                char *str_index;
                uint str_index_len;
                ulong num_index;
 
-               SEPARATE_ZVAL(pp);
+               SEPARATE_ZVAL_IF_NOT_REF(pp);
                p = *pp;
                p->type = IS_ARRAY;