summaryrefslogtreecommitdiff
path: root/Zend
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2020-11-09 10:18:43 +0100
committerNikita Popov <nikita.ppv@gmail.com>2020-11-09 10:19:32 +0100
commit6fb3d92525d28f0b617a53d05a6be74a3ef37fa5 (patch)
tree788035df9f3bbc50d8c230b020c78cb1eeb65241 /Zend
parent4bbe55b25078a1b5176faaf207aecb69be9811c8 (diff)
downloadphp-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.phpt30
-rw-r--r--Zend/zend_compile.c17
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);