]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
transfer.c: break receive loop in speed limited transfers
authorStefan Eissing <stefan@eissing.org>
Tue, 5 Mar 2024 10:08:55 +0000 (11:08 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Wed, 6 Mar 2024 07:07:37 +0000 (08:07 +0100)
- the change breaks looping in transfer.c receive for transfers that are
  speed limited on having gotten *some* bytes.
- the overall speed limit timing is done in multi.c

Reported-by: Dmitry Karpov
Bug: https://curl.se/mail/lib-2024-03/0001.html
Closes #13050

lib/transfer.c

index cd3bd37682deb9f04dc9fdb28684b14b4e331503..669beebd3a69db84055142db7c10376fd074e0be 100644 (file)
@@ -242,13 +242,14 @@ static CURLcode readwrite_data(struct Curl_easy *data,
     buf = xfer_buf;
     bytestoread = xfer_blen;
 
-    /* Observe any imposed speed limit */
     if(bytestoread && data->set.max_recv_speed) {
-      curl_off_t net_limit = data->set.max_recv_speed - total_received;
-      if(net_limit <= 0)
+      /* In case of speed limit on receiving: if this loop already got
+       * data, break out. If not, limit the amount of bytes to receive.
+       * The overall, timed, speed limiting is done in multi.c */
+      if(total_received)
         break;
-      if((size_t)net_limit < bytestoread)
-        bytestoread = (size_t)net_limit;
+      if((size_t)data->set.max_recv_speed < bytestoread)
+        bytestoread = (size_t)data->set.max_recv_speed;
     }
 
     nread = Curl_xfer_recv_resp(data, buf, bytestoread,