From: Corey Farrell Date: Tue, 9 Feb 2016 20:21:05 +0000 (-0500) Subject: Simplify and fix conditional in FD_SET. X-Git-Tag: 13.8.0-rc1~81 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=93e8ed01544bb1b9cba1dc24b06e157e3add9e23;p=thirdparty%2Fasterisk.git Simplify and fix conditional in FD_SET. 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 --- diff --git a/include/asterisk/select.h b/include/asterisk/select.h index d6d34fbbd2..d6f9d32cc3 100644 --- a/include/asterisk/select.h +++ b/include/asterisk/select.h @@ -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); \