diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | lib/pselect.c | 6 | ||||
-rw-r--r-- | lib/select.c | 7 |
3 files changed, 17 insertions, 2 deletions
@@ -1,3 +1,9 @@ +2023-04-24 Bruno Haible <bruno@clisp.org> + + select, pselect: Fix test failure on native Windows. + * lib/select.c (rpl_select): Fail if nfds is out-of-range. + * lib/pselect.c (pselect): Likewise. + 2023-04-24 Paul Eggert <eggert@cs.ucla.edu> fclose: pacify gcc -Wanalyzer-file-leak diff --git a/lib/pselect.c b/lib/pselect.c index f5d21e1048..52d3837878 100644 --- a/lib/pselect.c +++ b/lib/pselect.c @@ -45,6 +45,12 @@ pselect (int nfds, fd_set *restrict rfds, sigset_t origmask; struct timeval tv, *tvp; + if (nfds < 0 || nfds > FD_SETSIZE) + { + errno = EINVAL; + return -1; + } + if (timeout) { if (! (0 <= timeout->tv_nsec && timeout->tv_nsec < 1000000000)) diff --git a/lib/select.c b/lib/select.c index 3d3efff3de..6b6ca4154c 100644 --- a/lib/select.c +++ b/lib/select.c @@ -279,8 +279,11 @@ rpl_select (int nfds, fd_set *rfds, fd_set *wfds, fd_set *xfds, int i, fd, rc; clock_t tend; - if (nfds > FD_SETSIZE) - nfds = FD_SETSIZE; + if (nfds < 0 || nfds > FD_SETSIZE) + { + errno = EINVAL; + return -1; + } if (!timeout) wait_timeout = INFINITE; |