From: Stefan Eissing Date: Fri, 19 May 2023 10:00:46 +0000 (+0200) Subject: ngtcp2: proper handling of uint64_t when adjusting send buffer X-Git-Tag: curl-8_1_1~21 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7ab94d7d57e2dde712bd900ff1b62b2afff970d7;p=thirdparty%2Fcurl.git ngtcp2: proper handling of uint64_t when adjusting send buffer Fixes #11149 Closes #11153 --- diff --git a/lib/vquic/curl_ngtcp2.c b/lib/vquic/curl_ngtcp2.c index 3feace04a7..4baefc48fc 100644 --- a/lib/vquic/curl_ngtcp2.c +++ b/lib/vquic/curl_ngtcp2.c @@ -1438,6 +1438,7 @@ static int cb_h3_acked_req_body(nghttp3_conn *conn, int64_t stream_id, struct Curl_cfilter *cf = user_data; struct Curl_easy *data = stream_user_data; struct stream_ctx *stream = H3_STREAM_CTX(data); + size_t skiplen; (void)cf; if(!stream) @@ -1445,9 +1446,12 @@ static int cb_h3_acked_req_body(nghttp3_conn *conn, int64_t stream_id, /* The server ackknowledged `datalen` of bytes from our request body. * This is a delta. We have kept this data in `sendbuf` for * re-transmissions and can free it now. */ - Curl_bufq_skip(&stream->sendbuf, datalen); - DEBUGASSERT(stream->sendbuf_len_in_flight >= datalen); - stream->sendbuf_len_in_flight -= datalen; + if(datalen >= (uint64_t)stream->sendbuf_len_in_flight) + skiplen = stream->sendbuf_len_in_flight; + else + skiplen = (size_t)datalen; + Curl_bufq_skip(&stream->sendbuf, skiplen); + stream->sendbuf_len_in_flight -= skiplen; /* `sendbuf` *might* now have more room. If so, resume this * possibly paused stream. And also tell our transfer engine that