diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2020-11-09 10:18:43 +0100 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2020-11-09 10:19:32 +0100 |
commit | 6fb3d92525d28f0b617a53d05a6be74a3ef37fa5 (patch) | |
tree | 788035df9f3bbc50d8c230b020c78cb1eeb65241 /Zend | |
parent | 4bbe55b25078a1b5176faaf207aecb69be9811c8 (diff) | |
download | php-git-6fb3d92525d28f0b617a53d05a6be74a3ef37fa5.tar.gz |
Fixed bug #80334
If assert() was called with named args, add description as named
arg as well.
Diffstat (limited to 'Zend')
-rw-r--r-- | Zend/tests/named_params/assert.phpt | 30 | ||||
-rw-r--r-- | Zend/zend_compile.c | 17 |
2 files changed, 41 insertions, 6 deletions
diff --git a/Zend/tests/named_params/assert.phpt b/Zend/tests/named_params/assert.phpt new file mode 100644 index 0000000000..40a92a2f1f --- /dev/null +++ b/Zend/tests/named_params/assert.phpt @@ -0,0 +1,30 @@ +--TEST-- +Calling assert with named params +--FILE-- +<?php + +assert(assertion: true); +try { + assert(assertion: false); +} catch (AssertionError $e) { + echo $e->getMessage(), "\n"; +} + +assert(assertion: true, description: "Description"); +try { + assert(assertion: false, description: "Description"); +} catch (AssertionError $e) { + echo $e->getMessage(), "\n"; +} + +try { + assert(description: "Description"); +} catch (Error $e) { + echo $e->getMessage(), "\n"; +} + +?> +--EXPECT-- +assert(assertion: false) +Description +Named parameter $description overwrites previous argument diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 396cfd91c0..dbb2194437 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -3944,13 +3944,18 @@ static void zend_compile_assert(znode *result, zend_ast_list *args, zend_string } opline->result.num = zend_alloc_cache_slot(); - if (args->children == 1 && - (args->child[0]->kind != ZEND_AST_ZVAL || - Z_TYPE_P(zend_ast_get_zval(args->child[0])) != IS_STRING)) { + if (args->children == 1) { /* add "assert(condition) as assertion message */ - zend_ast_list_add((zend_ast*)args, - zend_ast_create_zval_from_str( - zend_ast_export("assert(", args->child[0], ")"))); + zend_ast *arg = zend_ast_create_zval_from_str( + zend_ast_export("assert(", args->child[0], ")")); + if (args->child[0]->kind == ZEND_AST_NAMED_ARG) { + /* If the original argument was named, add the new argument as named as well, + * as mixing named and positional is not allowed. */ + zend_ast *name = zend_ast_create_zval_from_str( + zend_string_init("description", sizeof("description") - 1, 0)); + arg = zend_ast_create(ZEND_AST_NAMED_ARG, name, arg); + } + zend_ast_list_add((zend_ast *) args, arg); } zend_compile_call_common(result, (zend_ast*)args, fbc); |