[asterisk-commits] tilghman: branch 1.6.2 r315502 - in /branches/1.6.2: ./ include/asterisk/

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Tue Apr 26 14:22:57 CDT 2011


Author: tilghman
Date: Tue Apr 26 14:22:52 2011
New Revision: 315502

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=315502
Log:
Merged revisions 315501 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
  r315501 | tilghman | 2011-04-26 14:18:46 -0500 (Tue, 26 Apr 2011) | 14 lines
  
  Fix the bounds-checking code.
  
  The code that set the bit within the select bitfield was correct, but the
  bounds-checking code was not.  The change to that line uses the new _bitsize
  macro for clarity.  Also, FD_ZERO macro did not zero-out anything but the
  first word of the bitfield, so this could have caused problems with modules
  using that macro with the expanded bitfield.
  
  (closes issue #18773)
   Reported by: jamicque
   Patches: 
         20110423__issue18773.diff.txt uploaded by tilghman (license 14)
   Tested by: chris-mac
........

Modified:
    branches/1.6.2/   (props changed)
    branches/1.6.2/include/asterisk/select.h

Propchange: branches/1.6.2/
------------------------------------------------------------------------------
Binary property 'branch-1.4-merged' - no diff available.

Modified: branches/1.6.2/include/asterisk/select.h
URL: http://svnview.digium.com/svn/asterisk/branches/1.6.2/include/asterisk/select.h?view=diff&rev=315502&r1=315501&r2=315502
==============================================================================
--- branches/1.6.2/include/asterisk/select.h (original)
+++ branches/1.6.2/include/asterisk/select.h Tue Apr 26 14:22:52 2011
@@ -43,12 +43,14 @@
 	TYPEOF_FD_SET_FDS_BITS fds_bits[ast_FDMAX / 8 / SIZEOF_FD_SET_FDS_BITS]; /* 32768 bits */
 } ast_fdset;
 
+#define _bitsize(a)	(sizeof(a) * 8)
+
 #undef FD_ZERO
 #define FD_ZERO(a) \
 	do { \
 		TYPEOF_FD_SET_FDS_BITS *bytes = (TYPEOF_FD_SET_FDS_BITS *) a; \
 		int i; \
-		for (i = 0; i < sizeof(*(a)) / SIZEOF_FD_SET_FDS_BITS; i++) { \
+		for (i = 0; i < ast_FDMAX / _bitsize(TYPEOF_FD_SET_FDS_BITS); i++) { \
 			bytes[i] = 0; \
 		} \
 	} while (0)
@@ -56,8 +58,10 @@
 #define FD_SET(fd, fds) \
 	do { \
 		TYPEOF_FD_SET_FDS_BITS *bytes = (TYPEOF_FD_SET_FDS_BITS *) fds; \
-		if (fd / sizeof(*bytes) + ((fd + 1) % sizeof(*bytes) ? 1 : 0) < sizeof(*(fds))) { \
-			bytes[fd / (sizeof(*bytes) * 8)] |= ((TYPEOF_FD_SET_FDS_BITS) 1) << (fd % (sizeof(*bytes) * 8)); \
+		/* 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) { \
+			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); \
 		} \




More information about the asterisk-commits mailing list