summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2023-04-24 21:28:32 +0200
committerBruno Haible <bruno@clisp.org>2023-04-24 21:33:23 +0200
commit034af0e401ce3279afd444c09ded2d64142b0f2f (patch)
tree0c461d81dd825dae7a6cb212202eeda73935a835
parent4bb14d69493fd3bbc328b86755420892a88d3fd8 (diff)
downloadgnulib-034af0e401ce3279afd444c09ded2d64142b0f2f.tar.gz
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.
-rw-r--r--ChangeLog6
-rw-r--r--lib/pselect.c6
-rw-r--r--lib/select.c7
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 <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;