Skip to content

Commit cd1c36f

Browse files
committed
Merge branch 'PHP-7.4'
* PHP-7.4: Fixed bug #80049
2 parents 9dc9534 + 2dabc4c commit cd1c36f

File tree

3 files changed

+16
-0
lines changed

3 files changed

+16
-0
lines changed

Zend/tests/bug80049.phpt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
--TEST--
2+
Bug #80049: Memleak when coercing integers to string via variadic argument
3+
--FILE--
4+
<?php
5+
function coerceToString(string ...$strings) {
6+
var_dump($strings);
7+
}
8+
coerceToString(...[123]);
9+
?>
10+
--EXPECT--
11+
array(1) {
12+
[0]=>
13+
string(3) "123"
14+
}

Zend/zend_vm_def.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5463,6 +5463,7 @@ ZEND_VM_HANDLER(164, ZEND_RECV_VARIADIC, NUM, UNUSED, CACHE_SLOT)
54635463
ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(params)) {
54645464
zval *param = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T);
54655465
if (UNEXPECTED(ZEND_TYPE_IS_SET(arg_info->type))) {
5466+
ZEND_ADD_CALL_FLAG(execute_data, ZEND_CALL_FREE_EXTRA_ARGS);
54665467
do {
54675468
if (UNEXPECTED(!zend_verify_variadic_arg_type(EX(func), arg_info, arg_num, param, CACHE_ADDR(opline->extended_value)))) {
54685469
ZEND_HASH_FILL_FINISH();

Zend/zend_vm_execute.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3907,6 +3907,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_VARIADIC_SPEC_UNUSED_HAND
39073907
ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(params)) {
39083908
zval *param = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T);
39093909
if (UNEXPECTED(ZEND_TYPE_IS_SET(arg_info->type))) {
3910+
ZEND_ADD_CALL_FLAG(execute_data, ZEND_CALL_FREE_EXTRA_ARGS);
39103911
do {
39113912
if (UNEXPECTED(!zend_verify_variadic_arg_type(EX(func), arg_info, arg_num, param, CACHE_ADDR(opline->extended_value)))) {
39123913
ZEND_HASH_FILL_FINISH();

0 commit comments

Comments
 (0)