summaryrefslogtreecommitdiff
path: root/Zend
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2014-07-24 00:59:42 +0400
committerDmitry Stogov <dmitry@zend.com>2014-07-24 00:59:42 +0400
commit39740a33e5883e8bba935769032bf87a87bbb238 (patch)
tree6f129560e7d8c22d276dc2c561b667730026d9bd /Zend
parent4c37e699573bfe004b73a412fa712083e75ad4e8 (diff)
parentd909b6330e314bb434350317fda5bec185ea12c0 (diff)
downloadphp-git-39740a33e5883e8bba935769032bf87a87bbb238.tar.gz
Merge branch 'PHP-5.6'
* PHP-5.6: Fixed crash on self-referencing constant expression (part of a constant AST)
Diffstat (limited to 'Zend')
-rw-r--r--Zend/tests/constant_expressions_self_referencing_array.phpt2
-rw-r--r--Zend/zend_ast.c17
2 files changed, 13 insertions, 6 deletions
diff --git a/Zend/tests/constant_expressions_self_referencing_array.phpt b/Zend/tests/constant_expressions_self_referencing_array.phpt
index 09f862e048..ae76a08602 100644
--- a/Zend/tests/constant_expressions_self_referencing_array.phpt
+++ b/Zend/tests/constant_expressions_self_referencing_array.phpt
@@ -1,7 +1,5 @@
--TEST--
Self-referencing constant expression (part of a constant AST)
---XFAIL--
-Not yet fixed, to be fixed for PHP 5.6
--FILE--
<?php
class A {
diff --git a/Zend/zend_ast.c b/Zend/zend_ast.c
index fceb940fa3..54448ac286 100644
--- a/Zend/zend_ast.c
+++ b/Zend/zend_ast.c
@@ -251,10 +251,19 @@ ZEND_API void zend_ast_evaluate(zval *result, zend_ast *ast, zend_class_entry *s
zval_dtor(&op2);
break;
case ZEND_CONST:
- *result = *ast->u.val;
- zval_copy_ctor(result);
- if (IS_CONSTANT_TYPE(Z_TYPE_P(result))) {
- zval_update_constant_ex(&result, 1, scope TSRMLS_CC);
+ /* class constants may be updated in-place */
+ if (scope) {
+ if (IS_CONSTANT_TYPE(Z_TYPE_P(ast->u.val))) {
+ zval_update_constant_ex(&ast->u.val, 1, scope TSRMLS_CC);
+ }
+ *result = *ast->u.val;
+ zval_copy_ctor(result);
+ } else {
+ *result = *ast->u.val;
+ zval_copy_ctor(result);
+ if (IS_CONSTANT_TYPE(Z_TYPE_P(result))) {
+ zval_update_constant_ex(&result, 1, scope TSRMLS_CC);
+ }
}
break;
case ZEND_BOOL_AND: