mirror of
https://github.com/php/php-src.git
synced 2026-03-24 00:02:20 +01:00
Fix #78402: pcntl_signal() misleading error message
An error message can be misleading when a handler passed to pcntl_signal() is not callable.
This commit is contained in:
committed by
Nikita Popov
parent
eb846939b1
commit
cbb0efaeeb
4
NEWS
4
NEWS
@@ -13,6 +13,10 @@ PHP NEWS
|
||||
. Fixed bug #78923 (Artifacts when convoluting image with transparency).
|
||||
(wilson chen)
|
||||
|
||||
- Pcntl:
|
||||
. Fixed bug #78402 (Converting null to string in error message is bad DX).
|
||||
(SATŌ Kentarō)
|
||||
|
||||
- PDO_PgSQL:
|
||||
. Fixed bug #78983 (pdo_pgsql config.w32 cannot find libpq-fe.h). (SATŌ
|
||||
Kentarō)
|
||||
|
||||
@@ -1005,6 +1005,7 @@ PHP_FUNCTION(pcntl_signal)
|
||||
zval *handle;
|
||||
zend_long signo;
|
||||
zend_bool restart_syscalls = 1;
|
||||
char *error = NULL;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "lz|b", &signo, &handle, &restart_syscalls) == FAILURE) {
|
||||
return;
|
||||
@@ -1043,13 +1044,15 @@ PHP_FUNCTION(pcntl_signal)
|
||||
RETURN_TRUE;
|
||||
}
|
||||
|
||||
if (!zend_is_callable(handle, 0, NULL)) {
|
||||
if (!zend_is_callable_ex(handle, NULL, 0, NULL, NULL, &error)) {
|
||||
zend_string *func_name = zend_get_callable_name(handle);
|
||||
PCNTL_G(last_error) = EINVAL;
|
||||
php_error_docref(NULL, E_WARNING, "%s is not a callable function name error", ZSTR_VAL(func_name));
|
||||
php_error_docref(NULL, E_WARNING, "Specified handler \"%s\" is not callable (%s)", ZSTR_VAL(func_name), error);
|
||||
zend_string_release_ex(func_name, 0);
|
||||
efree(error);
|
||||
RETURN_FALSE;
|
||||
}
|
||||
ZEND_ASSERT(!error);
|
||||
|
||||
/* Add the function name to our signal table */
|
||||
handle = zend_hash_index_update(&PCNTL_G(php_signal_table), signo, handle);
|
||||
|
||||
@@ -42,6 +42,6 @@ bool(false)
|
||||
Warning: pcntl_signal(): Invalid signal %s
|
||||
bool(false)
|
||||
|
||||
Warning: pcntl_signal(): not callable is not a callable function name error in %s
|
||||
Warning: pcntl_signal(): Specified handler "not callable" is not callable (%s) in %s
|
||||
bool(false)
|
||||
ok
|
||||
|
||||
Reference in New Issue
Block a user