Skip to content

Commit 5122ac0

Browse files
committed
Address revie comment + UPGRADING
1 parent 025054e commit 5122ac0

File tree

4 files changed

+41
-22
lines changed

4 files changed

+41
-22
lines changed

UPGRADING

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,14 @@ PHP 8.3 UPGRADE NOTES
5959
modifiable pointers but was rejected due to complexity. For this reason, it
6060
was decided to remove the feature instead.
6161

62+
- PCNTL:
63+
. The functions pcntl_sigwaitinfo() and pcntl_sigtimedwait() now throw:
64+
- A TypeError if a value of the $signals array is not an integer
65+
- A ValueError if the $signals array is empty
66+
- A ValueError if a value of the $signals array is not a valid signal number
67+
Moreover, those functions now always return false on failure.
68+
In some case previously it could return the value -1.
69+
6270
- Standard:
6371
. The range() function has had various changes:
6472
* A TypeError is now thrown when passing objects, resources, or arrays

ext/pcntl/pcntl.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -794,8 +794,8 @@ static bool php_pcntl_process_user_signal_infos(
794794
return false;
795795
}
796796
/* Signals are positive integers */
797-
if (tmp < 0 || tmp > INT_MAX) {
798-
zend_argument_value_error(1, "signals must be between 0 and %d", INT_MAX);
797+
if (tmp < 1 || tmp >= PCNTL_G(num_signals)) {
798+
zend_argument_value_error(1, "signals must be between 1 and %d", PCNTL_G(num_signals));
799799
return false;
800800
}
801801

@@ -836,8 +836,7 @@ PHP_FUNCTION(pcntl_sigwaitinfo)
836836
if (signal_no == -1 && errno != EAGAIN) {
837837
PCNTL_G(last_error) = errno;
838838
php_error_docref(NULL, E_WARNING, "%s", strerror(errno));
839-
// TODO BC Break, as -1 used to be returned?
840-
// RETURN_FALSE;
839+
RETURN_FALSE;
841840
}
842841

843842
/* sigwaitinfo can return 0 on success on some platforms, e.g. NetBSD */

ext/pcntl/tests/pcntl_sigtimedwait_errors.phpt

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@ try {
1717
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
1818
}
1919

20+
try {
21+
$signals = [0];
22+
$signal_no = pcntl_sigtimedwait($signals, $signal_infos, 2);
23+
} catch (\Throwable $e) {
24+
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
25+
}
2026
try {
2127
$signals = [-1];
2228
$signal_no = pcntl_sigtimedwait($signals, $signal_infos, 2);
@@ -32,16 +38,16 @@ try {
3238
}
3339

3440
/* Unlikely valid signal */
35-
$signals = [2**10];
36-
$signal_no = pcntl_sigtimedwait($signals, $signal_infos, 2);
37-
var_dump($signal_no);
38-
var_dump($signal_infos);
41+
try {
42+
$signals = [2**10];
43+
$signal_no = pcntl_sigtimedwait($signals, $signal_infos, 2);
44+
} catch (\Throwable $e) {
45+
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
46+
}
3947
?>
4048
--EXPECTF--
4149
ValueError: pcntl_sigtimedwait(): Argument #1 ($signals) cannot be empty
42-
ValueError: pcntl_sigtimedwait(): Argument #1 ($signals) signals must be between 0 and %d
50+
ValueError: pcntl_sigtimedwait(): Argument #1 ($signals) signals must be between 1 and %d
51+
ValueError: pcntl_sigtimedwait(): Argument #1 ($signals) signals must be between 1 and %d
4352
TypeError: pcntl_sigtimedwait(): Argument #1 ($signals) signals must be of type int, string given
44-
45-
Warning: pcntl_sigtimedwait(): Invalid argument in %s on line %d
46-
bool(false)
47-
NULL
53+
ValueError: pcntl_sigtimedwait(): Argument #1 ($signals) signals must be between 1 and %d

ext/pcntl/tests/pcntl_sigwaitinfo_errors.phpt

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@ try {
1717
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
1818
}
1919

20+
try {
21+
$signals = [0];
22+
$signal_no = pcntl_sigwaitinfo($signals, $signal_infos);
23+
} catch (\Throwable $e) {
24+
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
25+
}
2026
try {
2127
$signals = [-1];
2228
$signal_no = pcntl_sigwaitinfo($signals, $signal_infos);
@@ -32,16 +38,16 @@ try {
3238
}
3339

3440
/* Unlikely valid signal */
35-
$signals = [2**10];
36-
$signal_no = pcntl_sigwaitinfo($signals, $signal_infos);
37-
var_dump($signal_no);
38-
var_dump($signal_infos);
41+
try {
42+
$signals = [2**10];
43+
$signal_no = pcntl_sigwaitinfo($signals, $signal_infos);
44+
} catch (\Throwable $e) {
45+
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
46+
}
3947
?>
4048
--EXPECTF--
4149
ValueError: pcntl_sigwaitinfo(): Argument #1 ($signals) cannot be empty
42-
ValueError: pcntl_sigwaitinfo(): Argument #1 ($signals) signals must be between 0 and %d
50+
ValueError: pcntl_sigwaitinfo(): Argument #1 ($signals) signals must be between 1 and %d
51+
ValueError: pcntl_sigwaitinfo(): Argument #1 ($signals) signals must be between 1 and %d
4352
TypeError: pcntl_sigwaitinfo(): Argument #1 ($signals) signals must be of type int, string given
44-
45-
Warning: pcntl_sigwaitinfo(): Invalid argument in %s on line %d
46-
bool(false)
47-
NULL
53+
ValueError: pcntl_sigwaitinfo(): Argument #1 ($signals) signals must be between 1 and %d

0 commit comments

Comments
 (0)