From 3810b4ab4ad220d6c682879d79a7941cba62feae Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Thu, 27 Feb 2014 16:41:41 +0400 Subject: [PATCH] Fixed constant expressions in array indeces handling --- Zend/zend_compile.c | 5 ++--- Zend/zend_execute_API.c | 7 +++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 40694377be..50283d16cc 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -5908,9 +5908,8 @@ void zend_do_add_static_array_element(znode *result, znode *offset, const znode zend_string *key; //??? int len = sizeof(zend_ast *); //??? Z_TYPE(element) |= IS_CONSTANT_INDEX; - Z_STR(offset->u.constant)->gc.u.v.flags |= IS_STR_AST; - - key = STR_INIT((char*)Z_AST(offset->u.constant), sizeof(zend_ast*), 0); + key = STR_INIT((char*)&Z_AST(offset->u.constant), sizeof(zend_ast*), 0); + key->gc.u.v.flags |= IS_STR_AST; //??? key[len] = Z_TYPE(offset->u.constant); //??? key[len + 1] = 0; zend_symtable_update(Z_ARRVAL(result->u.constant), key, &element); diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index e81339b138..cf634b6be7 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -582,8 +582,11 @@ ZEND_API int zval_update_constant_ex(zval *p, void *arg, zend_class_entry *scope } if (str_index->gc.u.v.flags & IS_STR_AST) { - zend_ast_evaluate(&const_value, (zend_ast *)str_index->val, scope TSRMLS_CC); - zend_ast_destroy((zend_ast *)str_index->val); + zend_ast_ref *ast = *(zend_ast_ref **)str_index->val; + + zend_ast_evaluate(&const_value, ast->ast, scope TSRMLS_CC); + zend_ast_destroy(ast->ast); + efree(ast); //??? } else if (!zend_get_constant_ex(str_index->val, str_index->len, &const_value, scope, str_index->gc.u.v.flags TSRMLS_CC)) { char *actual, *str; -- 2.50.1