From 6da9d0f34af9212af914ea0685e31952faec24e1 Mon Sep 17 00:00:00 2001 From: zowoq <59103226+zowoq@users.noreply.github.com> Date: Tue, 21 Feb 2023 08:19:10 +1000 Subject: [PATCH] curl: 7.88.0 -> 7.88.1 https://curl.se/changes.html#7_88_1 --- .../curl/7.88.0-http2-breakage.patch | 101 ------------------ pkgs/tools/networking/curl/default.nix | 6 +- 2 files changed, 3 insertions(+), 104 deletions(-) delete mode 100644 pkgs/tools/networking/curl/7.88.0-http2-breakage.patch diff --git a/pkgs/tools/networking/curl/7.88.0-http2-breakage.patch b/pkgs/tools/networking/curl/7.88.0-http2-breakage.patch deleted file mode 100644 index fd22299a7627..000000000000 --- a/pkgs/tools/networking/curl/7.88.0-http2-breakage.patch +++ /dev/null @@ -1,101 +0,0 @@ -From 3103de2053ca8cacf9cdbe78764ba6814481709f Mon Sep 17 00:00:00 2001 -Date: Wed, 15 Feb 2023 22:11:13 +0100 -Subject: [PATCH] http2: buffer/pausedata and output flush fix. - - * do not process pending input data when copying pausedata to the - caller - * return CURLE_AGAIN if the output buffer could not be completely - written out. - -Ref: #10525 -Closes #10529 ---- - lib/http2.c | 15 +++------------ - 1 file changed, 3 insertions(+), 12 deletions(-) - -diff --git a/lib/http2.c b/lib/http2.c -index 46fc746457726..1ef5d3949218f 100644 ---- a/lib/http2.c -+++ b/lib/http2.c -@@ -467,6 +467,7 @@ static CURLcode flush_output(struct Curl_cfilter *cf, - } - if((size_t)written < buflen) { - Curl_dyn_tail(&ctx->outbuf, buflen - (size_t)written); -+ return CURLE_AGAIN; - } - else { - Curl_dyn_reset(&ctx->outbuf); -@@ -1790,6 +1791,7 @@ static ssize_t cf_h2_recv(struct Curl_cfilter *cf, struct Curl_easy *data, - - stream->pausedata += nread; - stream->pauselen -= nread; -+ drain_this(cf, data); - - if(stream->pauselen == 0) { - DEBUGF(LOG_CF(data, cf, "[h2sid=%u] Unpaused", stream->stream_id)); -@@ -1798,18 +1800,6 @@ static ssize_t cf_h2_recv(struct Curl_cfilter *cf, struct Curl_easy *data, - - stream->pausedata = NULL; - stream->pauselen = 0; -- -- /* When NGHTTP2_ERR_PAUSE is returned from -- data_source_read_callback, we might not process DATA frame -- fully. Calling nghttp2_session_mem_recv() again will -- continue to process DATA frame, but if there is no incoming -- frames, then we have to call it again with 0-length data. -- Without this, on_stream_close callback will not be called, -- and stream could be hanged. */ -- if(h2_process_pending_input(cf, data, err) != 0) { -- nread = -1; -- goto out; -- } - } - DEBUGF(LOG_CF(data, cf, "[h2sid=%u] recv: returns unpaused %zd bytes", - stream->stream_id, nread)); -@@ -1933,6 +1923,7 @@ static ssize_t cf_h2_recv(struct Curl_cfilter *cf, struct Curl_easy *data, - drained_transfer(cf, data); - } - -+ *err = CURLE_OK; - nread = retlen; - DEBUGF(LOG_CF(data, cf, "[h2sid=%u] cf_h2_recv -> %zd", - stream->stream_id, nread)); - - -From 87ed650d04dc1a6f7944a5d952f7d5b0934a19ac Mon Sep 17 00:00:00 2001 -From: Harry Sintonen -Date: Thu, 16 Feb 2023 06:26:26 +0200 -Subject: [PATCH] http2: set drain on stream end - -Ensure that on_frame_recv() stream end will trigger a read if there is -pending data. Without this it could happen that the pending data is -never consumed. - -This combined with https://github.com/curl/curl/pull/10529 should fix -https://github.com/curl/curl/issues/10525 - -Ref: https://github.com/curl/curl/issues/10525 -Closes #10530 ---- - lib/http2.c | 8 ++++++++ - 1 file changed, 8 insertions(+) - -diff --git a/lib/http2.c b/lib/http2.c -index 1ef5d3949218f..bdb5e7378e9cb 100644 ---- a/lib/http2.c -+++ b/lib/http2.c -@@ -868,6 +868,14 @@ static int on_frame_recv(nghttp2_session *session, const nghttp2_frame *frame, - return NGHTTP2_ERR_CALLBACK_FAILURE; - } - } -+ if(frame->hd.flags & NGHTTP2_FLAG_END_STREAM) { -+ /* Stream has ended. If there is pending data, ensure that read -+ will occur to consume it. */ -+ if(!data->state.drain && stream->memlen) { -+ drain_this(cf, data_s); -+ Curl_expire(data, 0, EXPIRE_RUN_NOW); -+ } -+ } - break; - case NGHTTP2_HEADERS: - DEBUGF(LOG_CF(data_s, cf, "[h2sid=%u] recv frame HEADERS", stream_id)); diff --git a/pkgs/tools/networking/curl/default.nix b/pkgs/tools/networking/curl/default.nix index 21173d4d070b..fca190bde4ab 100644 --- a/pkgs/tools/networking/curl/default.nix +++ b/pkgs/tools/networking/curl/default.nix @@ -48,19 +48,18 @@ assert !(opensslSupport && wolfsslSupport); stdenv.mkDerivation (finalAttrs: { pname = "curl"; - version = "7.88.0"; + version = "7.88.1"; src = fetchurl { urls = [ "https://curl.haxx.se/download/curl-${finalAttrs.version}.tar.bz2" "https://github.com/curl/curl/releases/download/curl-${finalAttrs.version}/curl-${finalAttrs.version}.tar.bz2" ]; - hash = "sha256-yB9DntAkQvapuVg237OpjgxHdhDKey9NWqH8MpVD0z8="; + hash = "sha256-giS0XM4Sq94DnBLcBxG36oWxBLmtU01uTFtOGIphyQc="; }; patches = [ ./7.79.1-darwin-no-systemconfiguration.patch - ./7.88.0-http2-breakage.patch ]; outputs = [ "bin" "dev" "out" "man" "devdoc" ]; @@ -185,6 +184,7 @@ stdenv.mkDerivation (finalAttrs: { }; meta = with lib; { + changelog = "https://curl.se/changes.html#${lib.replaceStrings [ "." ] [ "_" ] finalAttrs.version}"; description = "A command line tool for transferring files with URL syntax"; homepage = "https://curl.se/"; license = licenses.curl;