From: RĂ©mi Denis-Courmont Date: Fri, 26 Mar 2010 21:12:47 +0000 (+0200) Subject: Fail if fd is too big and poll() is not available X-Git-Url: http://git.demorecorder.com/cgi-bin/gitweb.cgi?a=commitdiff_plain;ds=sidebyside;h=a1d9aa6e07a297f4108b4ad787336f74c86a3312;hp=d18d03d6f37ec220805855d840950716e22354e4;p=free-sw%2Fxcb%2Flibxcb Fail if fd is too big and poll() is not available 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 Signed-off-by: Julien Danjou --- diff --git a/src/xcb_conn.c b/src/xcb_conn.c index ed2153d..1d37614 100644 --- a/src/xcb_conn.c +++ b/src/xcb_conn.c @@ -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);