summaryrefslogtreecommitdiff
path: root/lib/imap.c
diff options
context:
space:
mode:
authorAntarpreet Singh <antarpreet.singh@gmail.com>2020-05-08 00:50:26 +0530
committerDaniel Stenberg <daniel@haxx.se>2020-09-14 12:29:44 +0200
commitda5ae38db0642dc6f676217a7d77119cda4cce5a (patch)
tree13bf88d8483271fc01349008d06dd96140f8017c /lib/imap.c
parent51e8f2938bb0dd0a58d35bd48e5191a5c78275f7 (diff)
downloadcurl-da5ae38db0642dc6f676217a7d77119cda4cce5a.tar.gz
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
Diffstat (limited to 'lib/imap.c')
-rw-r--r--lib/imap.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/lib/imap.c b/lib/imap.c
index cad0e5908..39aa0af33 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);
}
}