]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
conncache: prevent integer overflow in maxconnects calculation
authorx2018 <xkernel.wang@foxmail.com>
Tue, 28 Oct 2025 15:35:45 +0000 (23:35 +0800)
committerDaniel Stenberg <daniel@haxx.se>
Thu, 30 Oct 2025 09:38:32 +0000 (10:38 +0100)
Closes #19271

lib/conncache.c

index 67e2a63d8a57671b05a7d494326adf1994f5e864..5c4bc357cc7a7fa2f5bb5d2b0ebb6a3a99215479 100644 (file)
@@ -531,12 +531,19 @@ static bool cpool_foreach(struct Curl_easy *data,
 bool Curl_cpool_conn_now_idle(struct Curl_easy *data,
                               struct connectdata *conn)
 {
-  unsigned int maxconnects = !data->multi->maxconnects ?
-    (Curl_multi_xfers_running(data->multi) * 4) : data->multi->maxconnects;
+  unsigned int maxconnects;
   struct connectdata *oldest_idle = NULL;
   struct cpool *cpool = cpool_get_instance(data);
   bool kept = TRUE;
 
+  if(!data->multi->maxconnects) {
+    unsigned int running = Curl_multi_xfers_running(data->multi);
+    maxconnects = (running <= UINT_MAX / 4) ? running * 4 : UINT_MAX;
+  }
+  else {
+    maxconnects = data->multi->maxconnects;
+  }
+
   conn->lastused = curlx_now(); /* it was used up until now */
   if(cpool && maxconnects) {
     /* may be called form a callback already under lock */