From e1ea1d40cb2ebd0a902cc366c01c0a098aa07962 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Mon, 2 Mar 2026 13:11:07 +0100 Subject: [PATCH] fixup split the check and increment into separate functions to deal with pausing proper and to make sure to not count non-delivered data (like when error is returned) --- lib/cw-out.c | 4 +++- lib/progress.c | 10 ++++++++-- lib/progress.h | 3 ++- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/lib/cw-out.c b/lib/cw-out.c index 31d6b8f8b5..437ded3a66 100644 --- a/lib/cw-out.c +++ b/lib/cw-out.c @@ -254,12 +254,14 @@ static CURLcode cw_out_ptr_flush(struct cw_out_ctx *ctx, break; wlen = max_write ? CURLMIN(blen, max_write) : blen; if(otype == CW_OUT_BODY) - result = Curl_pgrs_deliver_inc(data, wlen); + result = Curl_pgrs_deliver_check(data, wlen); if(!result) result = cw_out_cb_write(ctx, data, wcb, wcb_data, otype, buf, wlen, &nwritten); if(result) return result; + if(otype == CW_OUT_BODY && nwritten) + Curl_pgrs_deliver_inc(data, nwritten); *pconsumed += nwritten; blen -= nwritten; buf += nwritten; diff --git a/lib/progress.c b/lib/progress.c index f01919ff26..f21f50eb3b 100644 --- a/lib/progress.c +++ b/lib/progress.c @@ -342,15 +342,21 @@ void Curl_pgrsStartNow(struct Curl_easy *data) /* this counts how much data is delivered to the application, which in compressed cases may differ from downloaded amount */ -CURLcode Curl_pgrs_deliver_inc(struct Curl_easy *data, size_t delta) +CURLcode Curl_pgrs_deliver_check(struct Curl_easy *data, size_t delta) { if(data->set.max_filesize && ((curl_off_t)delta > data->set.max_filesize - data->progress.deliver)) return CURLE_FILESIZE_EXCEEDED; - data->progress.deliver += delta; return CURLE_OK; } +/* the check is already done, this is okay */ +void Curl_pgrs_deliver_inc(struct Curl_easy *data, size_t delta) +{ + data->progress.deliver += delta; +} + + void Curl_pgrs_download_inc(struct Curl_easy *data, size_t delta) { if(delta) { diff --git a/lib/progress.h b/lib/progress.h index 020113087c..82b0ec7e8c 100644 --- a/lib/progress.h +++ b/lib/progress.h @@ -50,7 +50,8 @@ int Curl_pgrsDone(struct Curl_easy *data); void Curl_pgrsStartNow(struct Curl_easy *data); void Curl_pgrsSetDownloadSize(struct Curl_easy *data, curl_off_t size); void Curl_pgrsSetUploadSize(struct Curl_easy *data, curl_off_t size); -CURLcode Curl_pgrs_deliver_inc(struct Curl_easy *data, size_t delta); +CURLcode Curl_pgrs_deliver_check(struct Curl_easy *data, size_t delta); +void Curl_pgrs_deliver_inc(struct Curl_easy *data, size_t delta); void Curl_pgrs_download_inc(struct Curl_easy *data, size_t delta); void Curl_pgrs_upload_inc(struct Curl_easy *data, size_t delta); void Curl_pgrsSetUploadCounter(struct Curl_easy *data, curl_off_t size);