Fail if fd is too big and poll() is not available
authorRémi Denis-Courmont <remi.denis-courmont@nokia.com>
Fri, 26 Mar 2010 21:12:47 +0000 (23:12 +0200)
committerJulien Danjou <julien@danjou.info>
Thu, 8 Apr 2010 10:05:00 +0000 (12:05 +0200)
Depending on the process file limit, a file descriptor can be larger
than the capacity of fd_set. There is no portable way to create a
large enough fd_set at run-time. So we just fail if the file descriptor
number is too high and poll() is not available.

Reviewed-by: Jamey Sharp <jamey@minilop.net>
Signed-off-by: Julien Danjou <julien@danjou.info>
src/xcb_conn.c

index ed2153d..1d37614 100644 (file)
@@ -210,6 +210,14 @@ xcb_connection_t *xcb_connect_to_fd(int fd, xcb_auth_info_t *auth_info)
 {
     xcb_connection_t* c;
 
+#ifndef USE_POLL
+    if(fd >= FD_SETSIZE) /* would overflow in FD_SET */
+    {
+        close(fd);
+        return (xcb_connection_t *) &error_connection;
+    }
+#endif
+
     c = calloc(1, sizeof(xcb_connection_t));
     if(!c) {
         close(fd);