Commit f38058d2232 for php.net
commit f38058d22321cf6c297a2098a890afaa58329354
Author: Calvin Buckley <calvinb@php.net>
Date: Mon Mar 9 13:29:06 2026 -0400
ext/pcntl: Bump num_signals to uint16_t (#21347)
On AIX, NSIG is def'd as SIGMAX64+1, and SIGMAX64 itself is def'd as
255:
```
$ grep -Rw SIGMAX64 /QOpenSys/usr/include/
/QOpenSys/usr/include/sys/signal.h:#define SIGMAX64 255
/QOpenSys/usr/include/sys/signal.h:#define SIGMAX SIGMAX64
/QOpenSys/usr/include/sys/signal.h:#define NSIG64 (SIGMAX64+1)
```
...this causes an overflow when we set num_signals from the value of
NSIG, per GCC:
```
/rpmbuild/BUILD/php-8.5.3/ext/pcntl/pcntl.c:216:25: warning: large integer implicitly truncated to unsigned type [-Woverflow]
PCNTL_G(num_signals) = NSIG;
^~~~
```
...when we try to use pcntl to i.e. install a signal handler, we get an
error from pcntl:
```
Fatal error: Uncaught ValueError: pcntl_signal(): Argument #1 ($signal) must be less than 0 in phar:///QOpenSys/pkgs/bin/composer/vendor/seld/signal-handler/src/SignalHandler.php:491
```
The easiest way to deal with this silly AIX behaviour is to just promote
the storage size.
diff --git a/ext/pcntl/php_pcntl.h b/ext/pcntl/php_pcntl.h
index f2cc0d59195..3757c7d9219 100644
--- a/ext/pcntl/php_pcntl.h
+++ b/ext/pcntl/php_pcntl.h
@@ -46,7 +46,8 @@ ZEND_BEGIN_MODULE_GLOBALS(pcntl)
bool processing_signal_queue;
volatile bool pending_signals;
bool async_signals;
- uint8_t num_signals;
+ /* some OSes define NSIG to be > UINT8_MAX */
+ uint16_t num_signals;
int last_error;
struct php_pcntl_pending_signal *head, *tail, *spares;
ZEND_END_MODULE_GLOBALS(pcntl)