aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/select.c13
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)) {