]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
imap: set cselect_bits to CURL_CSELECT_IN initially
authorAntarpreet Singh <antarpreet.singh@gmail.com>
Thu, 7 May 2020 19:20:26 +0000 (00:50 +0530)
committerDaniel Stenberg <daniel@haxx.se>
Mon, 14 Sep 2020 10:29:44 +0000 (12:29 +0200)
... when continuing a transfer from a FETCH response.

When the size of the file was small enough that the entirety of the
transfer happens in a single go and schannel buffers holds the entire
data. However, it wasn't completely read in Curl_pp_readresp since a
line break was found before that could happen. So, by the time we are in
imap_state_fetch_resp - there's data in buffers that needs to be read
via Curl_read but nothing to read from the socket. After we setup a
transfer (Curl_setup_transfer), curl just waits on the socket state to
change - which doesn't happen since no new data ever comes.

Closes #5961

lib/imap.c

index cad0e5908d91b8d45199c2a1a80b2ddc0ac2c47f..39aa0af336f93b2fa71e5d3d108c2afb08a645a5 100644 (file)
@@ -1176,6 +1176,9 @@ static CURLcode imap_state_fetch_resp(struct connectdata *conn, int imapcode,
     else {
       /* IMAP download */
       data->req.maxdownload = size;
+      /* force a recv/send check of this connection, as the data might've been
+       read off the socket already */
+      data->conn->cselect_bits = CURL_CSELECT_IN;
       Curl_setup_transfer(data, FIRSTSOCKET, size, FALSE, -1);
     }
   }