aboutsummaryrefslogtreecommitdiff
path: root/lib/imap.c
diff options
context:
space:
mode:
authorSteve Holme <steve_holme@hotmail.com>2013-09-08 10:30:43 +0100
committerSteve Holme <steve_holme@hotmail.com>2013-09-09 07:40:38 +0100
commite20e48cbf2a93c0fba7b0018f37de2cacd4df19f (patch)
tree667525bec20b56209a6b2aa9428907247f2e969c /lib/imap.c
parentee5e2cf6cbe78da65275e7e08e78266b1686811a (diff)
imap: Fixed calculation of transfer when partial FETCH received
The transfer size would be calculated incorrectly if the email contained within the FETCH response, had been partially received by the pingpong layer. As such the following, example output, would be seen if the amount remaining was smaller than the amount received: * Excess found in a non pipelined read: excess = 1394, size = 262, maxdownload = 262, bytecount = 1374 * transfer closed with -1112 bytes remaining to read Bug: http://curl.haxx.se/mail/lib-2013-08/0170.html Reported-by: John Dunn
Diffstat (limited to 'lib/imap.c')
-rw-r--r--lib/imap.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/lib/imap.c b/lib/imap.c
index 220708785..17e9eb0b0 100644
--- a/lib/imap.c
+++ b/lib/imap.c
@@ -1465,10 +1465,10 @@ static CURLcode imap_state_fetch_resp(struct connectdata *conn, int imapcode,
return result;
data->req.bytecount += chunk;
- size -= chunk;
infof(data, "Written %" FORMAT_OFF_TU " bytes, %" FORMAT_OFF_TU
- " bytes are left for transfer\n", (curl_off_t)chunk, size);
+ " bytes are left for transfer\n", (curl_off_t)chunk,
+ size - chunk);
/* Have we used the entire cache or just part of it?*/
if(pp->cache_size > chunk) {
@@ -1485,7 +1485,7 @@ static CURLcode imap_state_fetch_resp(struct connectdata *conn, int imapcode,
}
}
- if(!size)
+ if(data->req.bytecount == size)
/* The entire data is already transferred! */
Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
else {