Skip to content

Commit

Permalink
Only allow single comma in tail
Browse files Browse the repository at this point in the history
  • Loading branch information
laruence committed Jun 14, 2016
1 parent 14e790a commit 9c8e1c0
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 5 deletions.
10 changes: 10 additions & 0 deletions Zend/tests/list_013.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
--TEST--
Disallow tail empty elements in normal arrays
--FILE--
<?php

var_dump([1, 2, ,]);

?>
--EXPECTF--
Fatal error: Cannot use empty array elements in arrays in %s on line %d
2 changes: 1 addition & 1 deletion Zend/zend_ast.h
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,7 @@ static zend_always_inline zend_ast *zend_ast_create_cast(uint32_t type, zend_ast
}
static zend_always_inline void zend_ast_list_rtrim(zend_ast *ast) {
zend_ast_list *list = zend_ast_get_list(ast);
while (list->children && list->child[list->children - 1] == NULL) {
if (list->children && list->child[list->children - 1] == NULL) {
list->children--;
}
}
Expand Down
11 changes: 7 additions & 4 deletions Zend/zend_compile.c
Original file line number Diff line number Diff line change
Expand Up @@ -2762,10 +2762,7 @@ static void zend_verify_list_assign_target(zend_ast *var_ast, zend_bool old_styl
static void zend_compile_unkeyed_list_assign(zend_ast_list *list, znode *expr_node, zend_bool old_style) /* {{{ */
{
uint32_t i;

if (list->children == 0) {
zend_error_noreturn(E_COMPILE_ERROR, "Cannot use empty list");
}
zend_bool has_elems = 0;

for (i = 0; i < list->children; ++i) {
zend_ast *elem_ast = list->child[i];
Expand All @@ -2780,6 +2777,7 @@ static void zend_compile_unkeyed_list_assign(zend_ast_list *list, znode *expr_no
}

var_ast = elem_ast->child[0];
has_elems = 1;

dim_node.op_type = IS_CONST;
ZVAL_LONG(&dim_node.u.constant, i);
Expand All @@ -2797,6 +2795,11 @@ static void zend_compile_unkeyed_list_assign(zend_ast_list *list, znode *expr_no
zend_emit_op(&fetch_result, ZEND_FETCH_LIST, expr_node, &dim_node);
zend_emit_assign_znode(var_ast, &fetch_result);
}

if (has_elems == 0) {
zend_error_noreturn(E_COMPILE_ERROR, "Cannot use empty list");
}

}
/* }}} */

Expand Down

0 comments on commit 9c8e1c0

Please sign in to comment.