diff --git a/lib/transfer.c b/lib/transfer.c index 52fde048f46c98afb2bb2f22b45822ceed297fd4..805484bba51644a726bb1d379709c911993f7572 100644 --- a/lib/transfer.c +++ b/lib/transfer.c @@ -622,7 +622,7 @@ Transfer(struct connectdata *c_conn) /* If it returned OK, we just keep going */ } - if(conn->maxdownload && + if((-1 != conn->maxdownload) && (bytecount + nread >= conn->maxdownload)) { nread = conn->maxdownload - bytecount; if((signed int)nread < 0 ) /* this should be unusual */ @@ -634,7 +634,7 @@ Transfer(struct connectdata *c_conn) Curl_pgrsSetDownloadCounter(data, (double)bytecount); - if(! conn->bits.chunk) { + if(!conn->bits.chunk && nread) { /* If this is chunky transfer, it was already written */ urg = Curl_client_write(data, CLIENTWRITE_BODY, str, nread); if(urg) diff --git a/lib/url.c b/lib/url.c index d85c614049b34474e9311f6d3163d8585f53c8db..924f342bbab49bea4bc6a368e1dbd426f584ae83 100644 --- a/lib/url.c +++ b/lib/url.c @@ -1364,6 +1364,9 @@ static CURLcode Connect(struct UrlData *data, conn->bits.user_passwd = data->userpwd?1:0; conn->bits.proxy_user_passwd = data->proxyuserpwd?1:0; + /* maxdownload must be -1 on init, as 0 is a valid value! */ + conn->maxdownload = -1; /* might have been used previously! */ + /* Store creation time to help future close decision making */ conn->created = Curl_tvnow(); @@ -2029,8 +2032,8 @@ static CURLcode Connect(struct UrlData *data, conn->ppath = path; /* set this too */ /* re-use init */ - conn->maxdownload = 0; /* might have been used previously! */ conn->bits.reuse = TRUE; /* yes, we're re-using here */ + conn->maxdownload = -1; /* might have been used previously! */ free(old_conn); /* we don't need this anymore */