diff options
-rw-r--r-- | ext/standard/basic_functions.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index 2a8239795e..8d2546c863 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -1956,13 +1956,17 @@ PHP_FUNCTION(call_user_func_array) func_params_ht = Z_ARRVAL_PP(params); count = zend_hash_num_elements(func_params_ht); - func_params = safe_emalloc(sizeof(zval **), count, 0); - - for (zend_hash_internal_pointer_reset(func_params_ht); - zend_hash_get_current_data(func_params_ht, (void **) &func_params[current]) == SUCCESS; - zend_hash_move_forward(func_params_ht) - ) { - current++; + if (count) { + func_params = safe_emalloc(sizeof(zval **), count, 0); + + for (zend_hash_internal_pointer_reset(func_params_ht); + zend_hash_get_current_data(func_params_ht, (void **) &func_params[current]) == SUCCESS; + zend_hash_move_forward(func_params_ht) + ) { + current++; + } + } else { + func_params = NULL; } if (call_user_function_ex(EG(function_table), NULL, *func, &retval_ptr, count, func_params, 0, NULL TSRMLS_CC) == SUCCESS && retval_ptr) { @@ -1972,7 +1976,9 @@ PHP_FUNCTION(call_user_func_array) } efree(name); - efree(func_params); + if (func_params) { + efree(func_params); + } } /* }}} */ |