Skip to content

Commit

Permalink
Fix memory leak on unknown named param in iterator unpack
Browse files Browse the repository at this point in the history
  • Loading branch information
nikic committed Aug 26, 2020
1 parent eb17f99 commit 795ad1e
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 0 deletions.
7 changes: 7 additions & 0 deletions Zend/tests/named_params/unknown_named_param.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,12 @@ try {
echo $e->getMessage(), "\n";
}

try {
test(...new ArrayIterator(['unknown' => 42]));
} catch (Error $e) {
echo $e->getMessage(), "\n";
}

try {
test2(a: 42);
} catch (Error $e) {
Expand All @@ -38,3 +44,4 @@ try {
Unknown named parameter $b
Unknown named parameter $b
Unknown named parameter $b
Unknown named parameter $unknown
1 change: 1 addition & 0 deletions Zend/zend_vm_def.h
Original file line number Diff line number Diff line change
Expand Up @@ -5107,6 +5107,7 @@ ZEND_VM_C_LABEL(send_again):
have_named_params = 1;
top = zend_handle_named_arg(&EX(call), name, &arg_num, cache_slot);
if (UNEXPECTED(!top)) {
zend_string_release(name);
break;
}

Expand Down
1 change: 1 addition & 0 deletions Zend/zend_vm_execute.h
Original file line number Diff line number Diff line change
Expand Up @@ -1995,6 +1995,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_UNPACK_SPEC_HANDLER(ZEND_
have_named_params = 1;
top = zend_handle_named_arg(&EX(call), name, &arg_num, cache_slot);
if (UNEXPECTED(!top)) {
zend_string_release(name);
break;
}

Expand Down

0 comments on commit 795ad1e

Please sign in to comment.