@@ -287,6 +287,19 @@ ZEND_METHOD(Closure, bindTo)
287287 do_closure_bind (return_value , ZEND_THIS , newthis , scope_obj , scope_str );
288288}
289289
290+ static void zend_copy_parameters_array (const uint32_t param_count , HashTable * argument_array ) /* {{{ */
291+ {
292+ zval * param_ptr = ZEND_CALL_ARG (EG (current_execute_data ), 1 );
293+
294+ ZEND_ASSERT (param_count <= ZEND_CALL_NUM_ARGS (EG (current_execute_data )));
295+
296+ for (uint32_t i = 0 ; i < param_count ; i ++ ) {
297+ Z_TRY_ADDREF_P (param_ptr );
298+ zend_hash_next_index_insert_new (argument_array , param_ptr );
299+ param_ptr ++ ;
300+ }
301+ }
302+
290303static ZEND_NAMED_FUNCTION (zend_closure_call_magic ) /* {{{ */ {
291304 zend_fcall_info fci ;
292305 zend_fcall_info_cache fcc ;
@@ -310,14 +323,14 @@ static ZEND_NAMED_FUNCTION(zend_closure_call_magic) /* {{{ */ {
310323 array_init_size (& fci .params [1 ], ZEND_NUM_ARGS () + zend_hash_num_elements (EX (extra_named_params )));
311324 /* Avoid conversion from packed to mixed later. */
312325 zend_hash_real_init_mixed (Z_ARRVAL (fci .params [1 ]));
313- zend_copy_parameters_array (ZEND_NUM_ARGS (), & fci .params [1 ]);
326+ zend_copy_parameters_array (ZEND_NUM_ARGS (), Z_ARRVAL ( fci .params [1 ]) );
314327 ZEND_HASH_MAP_FOREACH_STR_KEY_VAL (EX (extra_named_params ), name , named_param_zval ) {
315328 Z_TRY_ADDREF_P (named_param_zval );
316329 zend_hash_add_new (Z_ARRVAL (fci .params [1 ]), name , named_param_zval );
317330 } ZEND_HASH_FOREACH_END ();
318331 } else if (ZEND_NUM_ARGS ()) {
319332 array_init_size (& fci .params [1 ], ZEND_NUM_ARGS ());
320- zend_copy_parameters_array (ZEND_NUM_ARGS (), & fci .params [1 ]);
333+ zend_copy_parameters_array (ZEND_NUM_ARGS (), Z_ARRVAL ( fci .params [1 ]) );
321334 } else {
322335 ZVAL_EMPTY_ARRAY (& fci .params [1 ]);
323336 }
0 commit comments