Skip to content

Commit

Permalink
Add support for FD_ISSET
Browse files Browse the repository at this point in the history
  • Loading branch information
jvoisin committed Nov 1, 2023
1 parent 8439dc0 commit cfdcaf7
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 0 deletions.
11 changes: 11 additions & 0 deletions include/sys/select.h
Expand Up @@ -49,12 +49,23 @@ _STI void __fortify_FD_SET(int __f, fd_set * _FORTIFY_POS0 __s)
FD_SET(__f, __s);
}

_STI int __fortify_FD_ISSET(int __f, fd_set * _FORTIFY_POS0 __s)
{
size_t __b = __bos(__s, 0);

if (__f < 0 || __f >= FD_SETSIZE || __b < sizeof(fd_set))
__builtin_trap();
return FD_ISSET(__f, __s);
}

#undef _STI

#undef FD_CLR
#define FD_CLR(fd, set) __fortify_FD_CLR(fd, set)
#undef FD_SET
#define FD_SET(fd, set) __fortify_FD_SET(fd, set)
#undef FD_ISSET
#define FD_ISSET(fd, set) __fortify_FD_ISSET(fd, set)

#ifdef __cplusplus
}
Expand Down
2 changes: 2 additions & 0 deletions tests/Makefile
Expand Up @@ -10,6 +10,8 @@ RUNTIME_TARGETS= \
test_FD_CLR_negative \
test_FD_SET_SETSIZE \
test_FD_SET_negative \
test_FD_ISSET_SETSIZE \
test_FD_ISSET_negative \
test_bcopy_dynamic_read \
test_bcopy_dynamic_write \
test_bcopy_static_read \
Expand Down
14 changes: 14 additions & 0 deletions tests/test_FD_ISSET_SETSIZE.c
@@ -0,0 +1,14 @@
#include "common.h"

#include <sys/select.h>

int main(int argc, char** argv) {
fd_set rfds;

CHK_FAIL_START
FD_ISSET(FD_SETSIZE, &rfds);
CHK_FAIL_END

puts((const char*)&rfds);
return ret;
}
14 changes: 14 additions & 0 deletions tests/test_FD_ISSET_negative.c
@@ -0,0 +1,14 @@
#include "common.h"

#include <sys/select.h>

int main(int argc, char** argv) {
fd_set rfds;

CHK_FAIL_START
FD_ISSET(-1, &rfds);
CHK_FAIL_END

puts((const char*)&rfds);
return ret;
}

0 comments on commit cfdcaf7

Please sign in to comment.