Home | History | Annotate | Download | only in test
      1 /* dave (at) treblig.org */
      2 #include <sys/select.h>
      3 #include <sys/time.h>
      4 #include <sys/types.h>
      5 #include <stdlib.h>
      6 #include <string.h>
      7 #include <unistd.h>
      8 
      9 char buffer[1024*1024*2];
     10 
     11 int main()
     12 {
     13 	fd_set rds;
     14 	struct timeval timeout;
     15 
     16 	FD_ZERO(&rds);
     17 	FD_SET(2, &rds);
     18 	/* Start with a nice simple select */
     19 	select(3, &rds, &rds, &rds, NULL);
     20 
     21 	/* Now the crash case that trinity found, negative nfds
     22 	 * but with a pointer to a large chunk of valid memory.
     23 	 */
     24 	FD_ZERO((fd_set*)buffer);
     25 	FD_SET(2,(fd_set*)buffer);
     26 	select(-1, (fd_set *)buffer, NULL, NULL, NULL);
     27 
     28 	/* Another variant, with nfds exceeding allowed limit. */
     29 	timeout.tv_sec = 0;
     30 	timeout.tv_usec = 100;
     31 	select(FD_SETSIZE + 1, (fd_set *)buffer, NULL, NULL, &timeout);
     32 
     33 	return 0;
     34 }
     35