summaryrefslogtreecommitdiff
path: root/Zend/zend_compile.c
diff options
context:
space:
mode:
authorNikita Popov <nikic@php.net>2016-07-06 21:15:05 +0200
committerNikita Popov <nikic@php.net>2016-07-06 21:15:54 +0200
commitab304579ff046426f281e9a95abea8d611e38e1c (patch)
tree93638cc0b9fc1d49b2c512263edad6a72ec5816f /Zend/zend_compile.c
parent0e8fe163b07147a0343969b15544d1fb3a61ace3 (diff)
downloadphp-git-ab304579ff046426f281e9a95abea8d611e38e1c.tar.gz
Forbid use of array() in nested destructuring
Previously array() was only forbidden on the outermost level.
Diffstat (limited to 'Zend/zend_compile.c')
-rw-r--r--Zend/zend_compile.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index 03ab7d177e..bf1615e8bb 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -2757,11 +2757,14 @@ void zend_compile_static_prop(znode *result, zend_ast *ast, uint32_t type, int d
static void zend_verify_list_assign_target(zend_ast *var_ast, zend_bool old_style) /* {{{ */ {
if (var_ast->kind == ZEND_AST_ARRAY) {
+ if (var_ast->attr == ZEND_ARRAY_SYNTAX_LONG) {
+ zend_error_noreturn(E_COMPILE_ERROR, "Cannot assign to array(), use [] instead");
+ }
if (old_style != var_ast->attr) {
- zend_error(E_COMPILE_ERROR, "Cannot mix [] and list()");
+ zend_error_noreturn(E_COMPILE_ERROR, "Cannot mix [] and list()");
}
} else if (!zend_can_write_to_variable(var_ast)) {
- zend_error(E_COMPILE_ERROR, "Assignments can only happen to writable values");
+ zend_error_noreturn(E_COMPILE_ERROR, "Assignments can only happen to writable values");
}
}
/* }}} */
@@ -6480,7 +6483,7 @@ static zend_bool zend_try_ct_eval_array(zval *result, zend_ast *ast) /* {{{ */
uint32_t i;
zend_bool is_constant = 1;
- if (ast->attr) {
+ if (ast->attr == ZEND_ARRAY_SYNTAX_LIST) {
zend_error(E_COMPILE_ERROR, "Cannot use list() as standalone expression");
}