]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
select: fix overflow protection in Curl_socket_check
authorJay Satiro <raysatiro@yahoo.com>
Thu, 23 Apr 2020 19:08:56 +0000 (15:08 -0400)
committerJay Satiro <raysatiro@yahoo.com>
Sat, 2 May 2020 19:02:20 +0000 (15:02 -0400)
Follow-up to a96c752 which changed the timeout_ms type from time_t to
timediff_t.

Ref: https://github.com/curl/curl/pull/5240

Closes https://github.com/curl/curl/pull/5286

lib/select.c

index d91b20a4bcec810294bed939843927fd3841a744..8e4c61bbdbea09e19d091595923f0048309fd3b7 100644 (file)
@@ -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)) {