Simplify and fix conditional in FD_SET.
authorCorey Farrell <git@cfware.com>
Tue, 9 Feb 2016 20:21:05 +0000 (15:21 -0500)
committerCorey Farrell <git@cfware.com>
Tue, 9 Feb 2016 20:39:35 +0000 (14:39 -0600)
FD_SET contains a conditional statement to protect against buffer
overruns.  The statement was overly complicated and prevented use
of the last array element of ast_fdset.  We now just verify the fd
is less than ast_FDMAX.

Change-Id: I41895c0b497b052aef5bf49d75c817c48b326f40

include/asterisk/select.h

index d6d34fb..d6f9d32 100644 (file)
@@ -58,9 +58,7 @@ typedef struct {
 #define FD_SET(fd, fds) \
        do { \
                TYPEOF_FD_SET_FDS_BITS *bytes = (TYPEOF_FD_SET_FDS_BITS *) fds; \
-               /* 32bit: FD / 32 + ((FD + 1) % 32 ? 1 : 0) < 1024 */ \
-               /* 64bit: FD / 64 + ((FD + 1) % 64 ? 1 : 0) < 512 */ \
-               if (fd / _bitsize(*bytes) + ((fd + 1) % _bitsize(*bytes) ? 1 : 0) < sizeof(*(fds)) / SIZEOF_FD_SET_FDS_BITS) { \
+               if (fd < ast_FDMAX) { \
                        bytes[fd / _bitsize(*bytes)] |= ((TYPEOF_FD_SET_FDS_BITS) 1) << (fd % _bitsize(*bytes)); \
                } else { \
                        fprintf(stderr, "FD %d exceeds the maximum size of ast_fdset!\n", fd); \