1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-11-18 00:10:04 +00:00

ftp/curl: Update to 8.10.1

Changes:	https://curl.se/changes.html
This commit is contained in:
Po-Chuan Hsieh 2024-09-26 01:48:24 +08:00
parent a12e3d3e1d
commit caa55df944
No known key found for this signature in database
GPG Key ID: 9A4BD10F002DD04B
4 changed files with 4 additions and 179 deletions

View File

@ -1,6 +1,5 @@
PORTNAME= curl
PORTVERSION= 8.10.0
PORTREVISION= 1
PORTVERSION= 8.10.1
CATEGORIES= ftp net www
MASTER_SITES= https://curl.se/download/ \
https://github.com/curl/curl/releases/download/curl-${PORTVERSION:S|.|_|g}/

View File

@ -1,5 +1,3 @@
TIMESTAMP = 1726080937
SHA256 (curl-8.10.0.tar.xz) = e6b142f0e85e954759d37e26a3627e2278137595be80e3a860c4353e4335e5a0
SIZE (curl-8.10.0.tar.xz) = 2729448
SHA256 (3eec5afbd0b6377eca893c392569b2faf094d970.patch) = ba87265c9f01fd608c1287666f4edead6b1a18bde328bff486aa81a77befa2f0
SIZE (3eec5afbd0b6377eca893c392569b2faf094d970.patch) = 912
TIMESTAMP = 1727260381
SHA256 (curl-8.10.1.tar.xz) = 73a4b0e99596a09fa5924a4fb7e4b995a85fda0d18a2c02ab9cf134bebce04ee
SIZE (curl-8.10.1.tar.xz) = 2726748

View File

@ -1,124 +0,0 @@
From 70d3a9b6aa69ffdd9435e168463cfabd21e17cd1 Mon Sep 17 00:00:00 2001
From: Stefan Eissing <stefan@eissing.org>
Date: Thu, 12 Sep 2024 10:03:33 +0200
Subject: [PATCH] http2: when uploading data from stdin, fix eos forwarding
When uploading data from stdin ('-T -'), and the EOS was only detected
on a 0-length read, the EOS was not forwarded to the filters. This led
HTTP/2 to hang on not forwarding this to the server.
Added test_07_14 to reproduce and verify.
Fixes #14870
Reported-by: nekopsykose on github
Closes #14877
---
lib/http2.c | 9 ++++-----
lib/request.c | 35 +++++++++++++++++++++++-----------
lib/request.h | 1 +
lib/transfer.c | 4 ++--
tests/http/test_07_upload.py | 37 ++++++++++++++++++++++++++++++++++++
5 files changed, 68 insertions(+), 18 deletions(-)
diff --git a/lib/http2.c b/lib/http2.c
index bc50a2f7a7fe43..df3e6f0df38fbf 100644
--- lib/http2.c
+++ lib/http2.c
@@ -1679,12 +1679,11 @@ static ssize_t req_body_read_callback(nghttp2_session *session,
CURL_TRC_CF(data_s, cf, "[%d] req_body_read(len=%zu) eos=%d -> %zd, %d",
stream_id, length, stream->body_eos, nread, result);
- if(nread == 0)
- return NGHTTP2_ERR_DEFERRED;
- if(stream->body_eos && Curl_bufq_is_empty(&stream->sendbuf))
+ if(stream->body_eos && Curl_bufq_is_empty(&stream->sendbuf)) {
*data_flags = NGHTTP2_DATA_FLAG_EOF;
-
- return nread;
+ return nread;
+ }
+ return (nread == 0)? NGHTTP2_ERR_DEFERRED : nread;
}
#if !defined(CURL_DISABLE_VERBOSE_STRINGS)
diff --git a/lib/request.c b/lib/request.c
index fb75e5577cdbb2..6b2784c3ff08e6 100644
--- lib/request.c
+++ lib/request.c
@@ -214,15 +214,19 @@ static CURLcode xfer_send(struct Curl_easy *data,
eos = TRUE;
}
result = Curl_xfer_send(data, buf, blen, eos, pnwritten);
- if(!result && *pnwritten) {
- if(hds_len)
- Curl_debug(data, CURLINFO_HEADER_OUT, (char *)buf,
- CURLMIN(hds_len, *pnwritten));
- if(*pnwritten > hds_len) {
- size_t body_len = *pnwritten - hds_len;
- Curl_debug(data, CURLINFO_DATA_OUT, (char *)buf + hds_len, body_len);
- data->req.writebytecount += body_len;
- Curl_pgrsSetUploadCounter(data, data->req.writebytecount);
+ if(!result) {
+ if(eos && (blen == *pnwritten))
+ data->req.eos_sent = TRUE;
+ if(*pnwritten) {
+ if(hds_len)
+ Curl_debug(data, CURLINFO_HEADER_OUT, (char *)buf,
+ CURLMIN(hds_len, *pnwritten));
+ if(*pnwritten > hds_len) {
+ size_t body_len = *pnwritten - hds_len;
+ Curl_debug(data, CURLINFO_DATA_OUT, (char *)buf + hds_len, body_len);
+ data->req.writebytecount += body_len;
+ Curl_pgrsSetUploadCounter(data, data->req.writebytecount);
+ }
}
}
return result;
@@ -304,8 +308,17 @@ static CURLcode req_flush(struct Curl_easy *data)
return Curl_xfer_flush(data);
}
- if(!data->req.upload_done && data->req.eos_read &&
- Curl_bufq_is_empty(&data->req.sendbuf)) {
+ if(data->req.eos_read && !data->req.eos_sent) {
+ char tmp;
+ size_t nwritten;
+ result = xfer_send(data, &tmp, 0, 0, &nwritten);
+ if(result)
+ return result;
+ DEBUGASSERT(data->req.eos_sent);
+ }
+
+ if(!data->req.upload_done && data->req.eos_read && data->req.eos_sent) {
+ DEBUGASSERT(Curl_bufq_is_empty(&data->req.sendbuf));
if(data->req.shutdown) {
bool done;
result = Curl_xfer_send_shutdown(data, &done);
diff --git a/lib/request.h b/lib/request.h
index fb3f9f116815cd..c53c3eb5ae7e7f 100644
--- lib/request.h
+++ lib/request.h
@@ -130,6 +130,7 @@ struct SingleRequest {
BIT(download_done); /* set to TRUE when download is complete */
BIT(eos_written); /* iff EOS has been written to client */
BIT(eos_read); /* iff EOS has been read from the client */
+ BIT(eos_sent); /* iff EOS has been sent to the server */
BIT(rewind_read); /* iff reader needs rewind at next start */
BIT(upload_done); /* set to TRUE when all request data has been sent */
BIT(upload_aborted); /* set to TRUE when upload was aborted. Will also
diff --git a/lib/transfer.c b/lib/transfer.c
index 0f42b3f2b4ddd6..ab8fd724314e4e 100644
--- lib/transfer.c
+++ lib/transfer.c
@@ -1253,8 +1253,8 @@ CURLcode Curl_xfer_send(struct Curl_easy *data,
else if(!result && *pnwritten)
data->info.request_size += *pnwritten;
- DEBUGF(infof(data, "Curl_xfer_send(len=%zu) -> %d, %zu",
- blen, result, *pnwritten));
+ DEBUGF(infof(data, "Curl_xfer_send(len=%zu, eos=%d) -> %d, %zu",
+ blen, eos, result, *pnwritten));
return result;
}

View File

@ -1,48 +0,0 @@
From bef0acaf212a71c782e0b8e8e6c772cc46040356 Mon Sep 17 00:00:00 2001
From: Stefan Eissing <stefan@eissing.org>
Date: Fri, 13 Sep 2024 09:58:16 +0200
Subject: [PATCH] request: correctly reset the eos_sent flag
Add test cases
Bug: https://marc.info/?l=git&m=172620452502747&w=2
Reported-by: Patrick Steinhardt
Closes #14895
---
lib/request.c | 5 +
tests/http/clients/.gitignore | 3 +-
tests/http/clients/Makefile.inc | 3 +-
.../clients/{h2-download.c => hx-download.c} | 0
tests/http/clients/hx-upload.c | 568 ++++++++++++++++++
tests/http/test_02_download.py | 12 +-
tests/http/test_07_upload.py | 61 ++
tests/http/test_19_shutdown.py | 2 +-
8 files changed, 645 insertions(+), 9 deletions(-)
rename tests/http/clients/{h2-download.c => hx-download.c} (100%)
create mode 100644 tests/http/clients/hx-upload.c
diff --git a/lib/request.c b/lib/request.c
index 6b2784c3ff08e6..1ddbdc9d0f1680 100644
--- lib/request.c
+++ lib/request.c
@@ -52,7 +52,11 @@ CURLcode Curl_req_soft_reset(struct SingleRequest *req,
req->done = FALSE;
req->upload_done = FALSE;
+ req->upload_aborted = FALSE;
req->download_done = FALSE;
+ req->eos_written = FALSE;
+ req->eos_read = FALSE;
+ req->eos_sent = FALSE;
req->ignorebody = FALSE;
req->shutdown = FALSE;
req->bytecount = 0;
@@ -146,6 +150,7 @@ void Curl_req_hard_reset(struct SingleRequest *req, struct Curl_easy *data)
req->download_done = FALSE;
req->eos_written = FALSE;
req->eos_read = FALSE;
+ req->eos_sent = FALSE;
req->upload_done = FALSE;
req->upload_aborted = FALSE;
req->ignorebody = FALSE;