@@ -1598,6 +1598,9 @@ PHP_FUNCTION(forward_static_call_array)
1598
1598
static void fci_addref (zend_fcall_info * fci , zend_fcall_info_cache * fci_cache )
1599
1599
{
1600
1600
Z_TRY_ADDREF (fci -> function_name );
1601
+ for (uint32_t i = 0 ; i < fci -> param_count ; ++ i ) {
1602
+ Z_TRY_ADDREF (fci -> params [i ]);
1603
+ }
1601
1604
if (fci_cache -> object ) {
1602
1605
GC_ADDREF (fci_cache -> object );
1603
1606
}
@@ -1606,24 +1609,26 @@ static void fci_addref(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache)
1606
1609
static void fci_release (zend_fcall_info * fci , zend_fcall_info_cache * fci_cache )
1607
1610
{
1608
1611
zval_ptr_dtor (& fci -> function_name );
1612
+ for (uint32_t i = 0 ; i < fci -> param_count ; ++ i ) {
1613
+ zval_ptr_dtor (& fci -> params [i ]);
1614
+ }
1609
1615
if (fci_cache -> object ) {
1610
1616
zend_object_release (fci_cache -> object );
1611
1617
}
1618
+ zend_release_fcall_info_cache (fci_cache );
1612
1619
}
1613
1620
1614
1621
void user_shutdown_function_dtor (zval * zv ) /* {{{ */
1615
1622
{
1616
1623
php_shutdown_function_entry * shutdown_function_entry = Z_PTR_P (zv );
1617
1624
1618
- zend_fcall_info_args_clear (& shutdown_function_entry -> fci , true);
1619
1625
fci_release (& shutdown_function_entry -> fci , & shutdown_function_entry -> fci_cache );
1620
1626
efree (shutdown_function_entry );
1621
1627
}
1622
1628
/* }}} */
1623
1629
1624
1630
void user_tick_function_dtor (user_tick_function_entry * tick_function_entry ) /* {{{ */
1625
1631
{
1626
- zend_fcall_info_args_clear (& tick_function_entry -> fci , true);
1627
1632
fci_release (& tick_function_entry -> fci , & tick_function_entry -> fci_cache );
1628
1633
}
1629
1634
/* }}} */
@@ -1722,16 +1727,13 @@ PHPAPI void php_free_shutdown_functions(void) /* {{{ */
1722
1727
PHP_FUNCTION (register_shutdown_function )
1723
1728
{
1724
1729
php_shutdown_function_entry entry ;
1725
- zval * params = NULL ;
1726
- uint32_t param_count = 0 ;
1727
1730
bool status ;
1728
1731
1729
- if (zend_parse_parameters (ZEND_NUM_ARGS (), "f*" , & entry .fci , & entry .fci_cache , & params , & param_count ) == FAILURE ) {
1732
+ if (zend_parse_parameters (ZEND_NUM_ARGS (), "f*" , & entry .fci , & entry .fci_cache , & entry . fci . params , & entry . fci . param_count ) == FAILURE ) {
1730
1733
RETURN_THROWS ();
1731
1734
}
1732
1735
1733
1736
fci_addref (& entry .fci , & entry .fci_cache );
1734
- zend_fcall_info_argp (& entry .fci , param_count , params );
1735
1737
1736
1738
status = append_user_shutdown_function (& entry );
1737
1739
ZEND_ASSERT (status );
@@ -2310,16 +2312,13 @@ PHP_FUNCTION(getprotobynumber)
2310
2312
PHP_FUNCTION (register_tick_function )
2311
2313
{
2312
2314
user_tick_function_entry tick_fe ;
2313
- zval * params = NULL ;
2314
- uint32_t param_count = 0 ;
2315
2315
2316
- if (zend_parse_parameters (ZEND_NUM_ARGS (), "f*" , & tick_fe .fci , & tick_fe .fci_cache , & params , & param_count ) == FAILURE ) {
2316
+ if (zend_parse_parameters (ZEND_NUM_ARGS (), "f*" , & tick_fe .fci , & tick_fe .fci_cache , & tick_fe . fci . params , & tick_fe . fci . param_count ) == FAILURE ) {
2317
2317
RETURN_THROWS ();
2318
2318
}
2319
2319
2320
2320
tick_fe .calling = false;
2321
2321
fci_addref (& tick_fe .fci , & tick_fe .fci_cache );
2322
- zend_fcall_info_argp (& tick_fe .fci , param_count , params );
2323
2322
2324
2323
if (!BG (user_tick_functions )) {
2325
2324
BG (user_tick_functions ) = (zend_llist * ) emalloc (sizeof (zend_llist ));
0 commit comments