Reflection: Copy invoke function also in the variadic case

It doesn't matter how the parameters are provided, we always have
to copy the trampoline invoke function.
This commit is contained in:
Nikita Popov 2018-10-03 10:48:42 +02:00
parent db80e0e2ad
commit 945f315506

View File

@ -3332,13 +3332,11 @@ static void reflection_method_invoke(INTERNAL_FUNCTION_PARAMETERS, int variadic)
fcc.called_scope = intern->ce;
fcc.object = object ? Z_OBJ_P(object) : NULL;
if (!variadic) {
/*
* Copy the zend_function when calling via handler (e.g. Closure::__invoke())
*/
if ((mptr->internal_function.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
fcc.function_handler = _copy_function(mptr);
}
/*
* Copy the zend_function when calling via handler (e.g. Closure::__invoke())
*/
if ((mptr->internal_function.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
fcc.function_handler = _copy_function(mptr);
}
result = zend_call_function(&fci, &fcc);