From: Antarpreet Singh Date: Thu, 7 May 2020 19:20:26 +0000 (+0530) Subject: imap: set cselect_bits to CURL_CSELECT_IN initially X-Git-Tag: curl-7_73_0~108 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=da5ae38db0642dc6f676217a7d77119cda4cce5a;p=thirdparty%2Fcurl.git imap: set cselect_bits to CURL_CSELECT_IN initially ... 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 --- diff --git a/lib/imap.c b/lib/imap.c index cad0e5908d..39aa0af336 100644 --- a/lib/imap.c +++ b/lib/imap.c @@ -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); } }