Skip to content

Commit 2dabc4c

Browse files
committed
Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3: Fixed bug #80049
2 parents 2f4a2a9 + 46a49be commit 2dabc4c

File tree

4 files changed

+18
-0
lines changed

4 files changed

+18
-0
lines changed

NEWS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ PHP NEWS
88
. Fixed bug #80037 (Typed property must not be accessed before initialization
99
when __get() declared). (Nikita)
1010
. Fixed bug #80048 (Bug #69100 has not been fixed for Windows). (cmb)
11+
. Fixed bug #80049 (Memleak when coercing integers to string via variadic
12+
argument). (Nikita)
1113

1214
- Calendar:
1315
. Fixed bug #80007 (Potential type confusion in unixtojd() parameter parsing).

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
@@ -5310,6 +5310,7 @@ ZEND_VM_HANDLER(164, ZEND_RECV_VARIADIC, NUM, UNUSED|CACHE_SLOT)
53105310
ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(params)) {
53115311
param = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T);
53125312
if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) {
5313+
ZEND_ADD_CALL_FLAG(execute_data, ZEND_CALL_FREE_EXTRA_ARGS);
53135314
do {
53145315
zend_verify_variadic_arg_type(EX(func), arg_num, param, NULL, CACHE_ADDR(opline->op2.num));
53155316
if (Z_OPT_REFCOUNTED_P(param)) Z_ADDREF_P(param);

Zend/zend_vm_execute.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3192,6 +3192,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_VARIADIC_SPEC_UNUSED_HAND
31923192
ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(params)) {
31933193
param = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T);
31943194
if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) {
3195+
ZEND_ADD_CALL_FLAG(execute_data, ZEND_CALL_FREE_EXTRA_ARGS);
31953196
do {
31963197
zend_verify_variadic_arg_type(EX(func), arg_num, param, NULL, CACHE_ADDR(opline->op2.num));
31973198
if (Z_OPT_REFCOUNTED_P(param)) Z_ADDREF_P(param);

0 commit comments

Comments
 (0)