From: Dmitry Stogov Date: Wed, 8 Jun 2005 13:21:01 +0000 (+0000) Subject: Fixed bug #30140 (Problem with array in static properties) X-Git-Tag: php-5.0.5RC1~182 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cff8050b8325bbf8a2260222ebfa559ce17a5538;p=php Fixed bug #30140 (Problem with array in static properties) --- diff --git a/NEWS b/NEWS index a89f7de0eb..ac181cd096 100644 --- a/NEWS +++ b/NEWS @@ -143,6 +143,7 @@ PHP NEWS array_push()). (Dmitry) - Fixed bug #30162 (Catching exception in constructor causes lose of $this). (Dmitry) +- Fixed bug #30140 (Problem with array in static properties). (Dmitry) - Fixed bug #30126 (Enhancement for error message for abstract classes). (Marcus) - Fixed bug #30080 (Passing array or non array of objects). (Dmitry) diff --git a/Zend/tests/bug30140.phpt b/Zend/tests/bug30140.phpt new file mode 100755 index 0000000000..1dfb83500f --- /dev/null +++ b/Zend/tests/bug30140.phpt @@ -0,0 +1,30 @@ +--TEST-- +Bug #30140 (Problem with array in static properties) +--FILE-- + +--EXPECT-- +string(1) "x" +string(1) "y" +string(1) "z" +string(1) "x" +string(1) "y" +string(1) "z" diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index afa26a5885..b26767615a 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -437,11 +437,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'", @@ -458,15 +460,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;