Skip to content

Commit 795ad1e

Browse files
committed
Fix memory leak on unknown named param in iterator unpack
1 parent eb17f99 commit 795ad1e

File tree

3 files changed

+9
-0
lines changed

3 files changed

+9
-0
lines changed

Zend/tests/named_params/unknown_named_param.phpt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,12 @@ try {
2727
echo $e->getMessage(), "\n";
2828
}
2929

30+
try {
31+
test(...new ArrayIterator(['unknown' => 42]));
32+
} catch (Error $e) {
33+
echo $e->getMessage(), "\n";
34+
}
35+
3036
try {
3137
test2(a: 42);
3238
} catch (Error $e) {
@@ -38,3 +44,4 @@ try {
3844
Unknown named parameter $b
3945
Unknown named parameter $b
4046
Unknown named parameter $b
47+
Unknown named parameter $unknown

Zend/zend_vm_def.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5107,6 +5107,7 @@ ZEND_VM_C_LABEL(send_again):
51075107
have_named_params = 1;
51085108
top = zend_handle_named_arg(&EX(call), name, &arg_num, cache_slot);
51095109
if (UNEXPECTED(!top)) {
5110+
zend_string_release(name);
51105111
break;
51115112
}
51125113

Zend/zend_vm_execute.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1995,6 +1995,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_UNPACK_SPEC_HANDLER(ZEND_
19951995
have_named_params = 1;
19961996
top = zend_handle_named_arg(&EX(call), name, &arg_num, cache_slot);
19971997
if (UNEXPECTED(!top)) {
1998+
zend_string_release(name);
19981999
break;
19992000
}
20002001

0 commit comments

Comments
 (0)