diff options
-rw-r--r-- | lib/select.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/lib/select.c b/lib/select.c index d91b20a4b..8e4c61bbd 100644 --- a/lib/select.c +++ b/lib/select.c @@ -22,6 +22,8 @@ #include "curl_setup.h" +#include <limits.h> + #ifdef HAVE_SYS_SELECT_H #include <sys/select.h> #elif defined(HAVE_UNISTD_H) @@ -50,6 +52,7 @@ #include "urldata.h" #include "connect.h" #include "select.h" +#include "timeval.h" #include "warnless.h" /* Convenience local macros */ @@ -216,11 +219,15 @@ int Curl_socket_check(curl_socket_t readfd0, /* two sockets to read from */ int r; int ret; -#if SIZEOF_TIME_T != SIZEOF_INT - /* wrap-around precaution */ - if(timeout_ms >= INT_MAX) + /* prevent overflow. timeout_ms is typecast to time_t and int. */ +#if TIMEDIFF_T_MAX > INT_MAX + if(timeout_ms > INT_MAX) timeout_ms = INT_MAX; #endif +#if INT_MAX > TIME_T_MAX + if(timeout_ms > (int)TIME_T_MAX) + timeout_ms = (int)TIME_T_MAX; +#endif if((readfd0 == CURL_SOCKET_BAD) && (readfd1 == CURL_SOCKET_BAD) && (writefd == CURL_SOCKET_BAD)) { |