From dae83cd7cbda51570b660b463cdf13df1cf1e229 Mon Sep 17 00:00:00 2001 From: George Peter Banyard Date: Wed, 8 Jul 2020 18:37:01 +0200 Subject: Use ZPP callable check for Windows specific functions --- win32/signal.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) (limited to 'win32') diff --git a/win32/signal.c b/win32/signal.c index 2436313d2a..41936f840f 100644 --- a/win32/signal.c +++ b/win32/signal.c @@ -87,10 +87,13 @@ static BOOL WINAPI php_win32_signal_system_ctrl_handler(DWORD evt) /* {{{ Assigns a CTRL signal handler to a PHP function */ PHP_FUNCTION(sapi_windows_set_ctrl_handler) { - zval *handler = NULL; + zend_fcall_info fci; + zend_fcall_info_cache fcc; zend_bool add = 1; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "z|b", &handler, &add) == FAILURE) { + + /* callable argument corresponds to the CTRL handler */ + if (zend_parse_parameters(ZEND_NUM_ARGS(), "f!|b", &fci, &fcc, &add) == FAILURE) { RETURN_THROWS(); } @@ -106,8 +109,7 @@ PHP_FUNCTION(sapi_windows_set_ctrl_handler) RETURN_THROWS(); } - - if (IS_NULL == Z_TYPE_P(handler)) { + if (!ZEND_FCI_INITIALIZED(fci)) { zval_dtor(&ctrl_handler); ZVAL_UNDEF(&ctrl_handler); if (!SetConsoleCtrlHandler(NULL, add)) { @@ -116,20 +118,15 @@ PHP_FUNCTION(sapi_windows_set_ctrl_handler) RETURN_TRUE; } - if (!zend_is_callable(handler, 0, NULL)) { - zend_argument_type_error(1, "must be a valid callable function name"); - RETURN_THROWS(); - } - if (!SetConsoleCtrlHandler(NULL, FALSE) || !SetConsoleCtrlHandler(php_win32_signal_system_ctrl_handler, add)) { - zend_string *func_name = zend_get_callable_name(handler); + zend_string *func_name = zend_get_callable_name(&fci.function_name); php_error_docref(NULL, E_WARNING, "Unable to attach %s as a CTRL handler", ZSTR_VAL(func_name)); zend_string_release_ex(func_name, 0); RETURN_FALSE; } zval_dtor(&ctrl_handler); - ZVAL_COPY(&ctrl_handler, handler); + ZVAL_COPY(&ctrl_handler, &fci.function_name); RETURN_TRUE; }/*}}}*/ -- cgit v1.2.1