From 034af0e401ce3279afd444c09ded2d64142b0f2f Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Mon, 24 Apr 2023 21:28:32 +0200 Subject: 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. --- ChangeLog | 6 ++++++ lib/pselect.c | 6 ++++++ lib/select.c | 7 +++++-- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8d39a64023..587b210323 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2023-04-24 Bruno Haible + + 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 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; -- cgit v1.2.1