[arch-commits] Commit in curl/repos (5 files)
Evangelos Foutras
foutrelis at gemini.archlinux.org
Fri Apr 1 13:53:56 UTC 2022
Date: Friday, April 1, 2022 @ 13:53:56
Author: foutrelis
Revision: 441088
archrelease: copy trunk to testing-x86_64
Added:
curl/repos/testing-x86_64/
curl/repos/testing-x86_64/0001-http2-handle-DONE-called-for-the-paused-stream.patch
(from rev 441087, curl/trunk/0001-http2-handle-DONE-called-for-the-paused-stream.patch)
curl/repos/testing-x86_64/0002-http-close-the-stream-not-connection-on-time-conditi.patch
(from rev 441087, curl/trunk/0002-http-close-the-stream-not-connection-on-time-conditi.patch)
curl/repos/testing-x86_64/0003-http2-RST-the-stream-if-we-stop-it-on-our-own-will.patch
(from rev 441087, curl/trunk/0003-http2-RST-the-stream-if-we-stop-it-on-our-own-will.patch)
curl/repos/testing-x86_64/PKGBUILD
(from rev 441087, curl/trunk/PKGBUILD)
-----------------------------------------------------------------+
0001-http2-handle-DONE-called-for-the-paused-stream.patch | 34 ++
0002-http-close-the-stream-not-connection-on-time-conditi.patch | 24 +
0003-http2-RST-the-stream-if-we-stop-it-on-our-own-will.patch | 62 ++++
PKGBUILD | 133 ++++++++++
4 files changed, 253 insertions(+)
Copied: curl/repos/testing-x86_64/0001-http2-handle-DONE-called-for-the-paused-stream.patch (from rev 441087, curl/trunk/0001-http2-handle-DONE-called-for-the-paused-stream.patch)
===================================================================
--- testing-x86_64/0001-http2-handle-DONE-called-for-the-paused-stream.patch (rev 0)
+++ testing-x86_64/0001-http2-handle-DONE-called-for-the-paused-stream.patch 2022-04-01 13:53:56 UTC (rev 441088)
@@ -0,0 +1,34 @@
+From b5a9680577925a65477a666174a8e021ab418693 Mon Sep 17 00:00:00 2001
+From: Daniel Stenberg <daniel at haxx.se>
+Date: Fri, 1 Apr 2022 13:22:58 +0200
+Subject: [PATCH 1/3] http2: handle DONE called for the paused stream
+
+As it could otherwise stall all streams on the connection
+
+Reported-by: Evangelos Foutras
+Fixes #8626
+Closes #8664
+---
+ lib/http2.c | 9 ++++-----
+ 1 file changed, 4 insertions(+), 5 deletions(-)
+
+diff --git a/lib/http2.c b/lib/http2.c
+index 82a993930..34daaf17c 100644
+--- a/lib/http2.c
++++ b/lib/http2.c
+@@ -1240,11 +1240,10 @@ void Curl_http2_done(struct Curl_easy *data, bool premature)
+ if(!nghttp2_submit_rst_stream(httpc->h2, NGHTTP2_FLAG_NONE,
+ http->stream_id, NGHTTP2_STREAM_CLOSED))
+ (void)nghttp2_session_send(httpc->h2);
+-
+- if(http->stream_id == httpc->pause_stream_id) {
+- H2BUGF(infof(data, "stopped the pause stream!"));
+- httpc->pause_stream_id = 0;
+- }
++ }
++ if(http->stream_id == httpc->pause_stream_id) {
++ H2BUGF(infof(data, "DONE the pause stream!"));
++ httpc->pause_stream_id = 0;
+ }
+
+ if(data->state.drain)
Copied: curl/repos/testing-x86_64/0002-http-close-the-stream-not-connection-on-time-conditi.patch (from rev 441087, curl/trunk/0002-http-close-the-stream-not-connection-on-time-conditi.patch)
===================================================================
--- testing-x86_64/0002-http-close-the-stream-not-connection-on-time-conditi.patch (rev 0)
+++ testing-x86_64/0002-http-close-the-stream-not-connection-on-time-conditi.patch 2022-04-01 13:53:56 UTC (rev 441088)
@@ -0,0 +1,24 @@
+From 3fa634a33742c1c585a7d43e354cc227423ffb29 Mon Sep 17 00:00:00 2001
+From: Daniel Stenberg <daniel at haxx.se>
+Date: Fri, 1 Apr 2022 13:22:58 +0200
+Subject: [PATCH 2/3] http: close the stream (not connection) on time condition
+ abort
+
+Closes #8664
+---
+ lib/http.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/lib/http.c b/lib/http.c
+index 6445f98f8..63cc748e8 100644
+--- a/lib/http.c
++++ b/lib/http.c
+@@ -2955,7 +2955,7 @@ CURLcode Curl_http_firstwrite(struct Curl_easy *data,
+ infof(data, "Simulate a HTTP 304 response!");
+ /* we abort the transfer before it is completed == we ruin the
+ re-use ability. Close the connection */
+- connclose(conn, "Simulated 304 handling");
++ streamclose(conn, "Simulated 304 handling");
+ return CURLE_OK;
+ }
+ } /* we have a time condition */
Copied: curl/repos/testing-x86_64/0003-http2-RST-the-stream-if-we-stop-it-on-our-own-will.patch (from rev 441087, curl/trunk/0003-http2-RST-the-stream-if-we-stop-it-on-our-own-will.patch)
===================================================================
--- testing-x86_64/0003-http2-RST-the-stream-if-we-stop-it-on-our-own-will.patch (rev 0)
+++ testing-x86_64/0003-http2-RST-the-stream-if-we-stop-it-on-our-own-will.patch 2022-04-01 13:53:56 UTC (rev 441088)
@@ -0,0 +1,62 @@
+From fda4b81635672568efc716889d79e446bccc90ed Mon Sep 17 00:00:00 2001
+From: Daniel Stenberg <daniel at haxx.se>
+Date: Fri, 1 Apr 2022 13:23:04 +0200
+Subject: [PATCH 3/3] http2: RST the stream if we stop it on our own will
+
+For the "simulated 304" case the done-call isn't considered "premature"
+but since the server didn't close the stream it needs to be reset to
+stop delivering data.
+
+Closes #8664
+---
+ lib/http2.c | 24 +++++++++++++++---------
+ 1 file changed, 15 insertions(+), 9 deletions(-)
+
+diff --git a/lib/http2.c b/lib/http2.c
+index 34daaf17c..34031f17c 100644
+--- a/lib/http2.c
++++ b/lib/http2.c
+@@ -825,10 +825,14 @@ static int on_data_chunk_recv(nghttp2_session *session, uint8_t flags,
+
+ /* get the stream from the hash based on Stream ID */
+ data_s = nghttp2_session_get_stream_user_data(session, stream_id);
+- if(!data_s)
+- /* Receiving a Stream ID not in the hash should not happen, this is an
+- internal error more than anything else! */
+- return NGHTTP2_ERR_CALLBACK_FAILURE;
++ if(!data_s) {
++ /* Receiving a Stream ID not in the hash should not happen - unless
++ we have aborted a transfer artificially and there were more data
++ in the pipeline. Silently ignore. */
++ H2BUGF(fprintf(stderr, "Data for stream %u but it doesn't exist\n",
++ stream_id));
++ return 0;
++ }
+
+ stream = data_s->req.p.http;
+ if(!stream)
+@@ -1234,17 +1238,19 @@ void Curl_http2_done(struct Curl_easy *data, bool premature)
+ !httpc->h2) /* not HTTP/2 ? */
+ return;
+
+- if(premature) {
++ /* do this before the reset handling, as that might clear ->stream_id */
++ if(http->stream_id == httpc->pause_stream_id) {
++ H2BUGF(infof(data, "DONE the pause stream (%x)", http->stream_id));
++ httpc->pause_stream_id = 0;
++ }
++ if(premature || (!http->closed && http->stream_id)) {
+ /* RST_STREAM */
+ set_transfer(httpc, data); /* set the transfer */
++ H2BUGF(infof(data, "RST stream %x", http->stream_id));
+ if(!nghttp2_submit_rst_stream(httpc->h2, NGHTTP2_FLAG_NONE,
+ http->stream_id, NGHTTP2_STREAM_CLOSED))
+ (void)nghttp2_session_send(httpc->h2);
+ }
+- if(http->stream_id == httpc->pause_stream_id) {
+- H2BUGF(infof(data, "DONE the pause stream!"));
+- httpc->pause_stream_id = 0;
+- }
+
+ if(data->state.drain)
+ drained_transfer(data, httpc);
Copied: curl/repos/testing-x86_64/PKGBUILD (from rev 441087, curl/trunk/PKGBUILD)
===================================================================
--- testing-x86_64/PKGBUILD (rev 0)
+++ testing-x86_64/PKGBUILD 2022-04-01 13:53:56 UTC (rev 441088)
@@ -0,0 +1,133 @@
+# Maintainer: Dave Reisner <dreisner at archlinux.org>
+# Contributor: Angel Velasquez <angvp at archlinux.org>
+# Contributor: Eric Belanger <eric at archlinux.org>
+# Contributor: Lucien Immink <l.immink at student.fnt.hvu.nl>
+# Contributor: Daniel J Griffiths <ghost1227 at archlinux.us>
+
+pkgbase=curl
+pkgname=(curl libcurl-compat libcurl-gnutls)
+pkgver=7.82.0
+pkgrel=2
+pkgdesc='An URL retrieval utility and library'
+arch=('x86_64')
+url='https://curl.haxx.se'
+license=('MIT')
+options=('debug')
+depends=('ca-certificates' 'brotli' 'libbrotlidec.so' 'krb5' 'libgssapi_krb5.so'
+ 'libidn2' 'libidn2.so' 'libnghttp2' 'libpsl' 'libpsl.so' 'libssh2' 'libssh2.so'
+ 'openssl' 'zlib' 'zstd' 'libzstd.so')
+provides=('libcurl.so')
+source=("https://curl.haxx.se/download/${pkgname}-${pkgver}.tar.gz"{,.asc}
+ 0001-http2-handle-DONE-called-for-the-paused-stream.patch
+ 0002-http-close-the-stream-not-connection-on-time-conditi.patch
+ 0003-http2-RST-the-stream-if-we-stop-it-on-our-own-will.patch)
+sha512sums=('d4c4a785876e0d1ba1c1adbe65528d56a8b81fc03ff724e87819cfe51aca60f8a7bf2ac9384f30c3a6bbd28669b2bd3e9a6794737243c836c4902d085a72c474'
+ 'SKIP'
+ '0d883c3fc267c4c5d82078e03689db31f83292cb41f3f6fab26d05fa9cbaa77ae75cfd3bbb4f6953bbc4bc9760c54b49bdfdae219cd48af92312abbb1ba70ec6'
+ '422df75880b107a5c457d25ca1488166f5e61cc2876ad0193a742ad6cf4cae5363b0c7bd00cbaf9f49a5e5d503159cb2d2fd3d602abf3935dc3f77f14e9027dc'
+ '394f27e8721c23b82924064df8f72aa33f6e5064d0a3798a59543fd7d9660939437f1a6f45f03370d517edf5d4a218a9d41b4d62e7498d4f520f026da68007b1')
+validpgpkeys=('27EDEAF22F3ABCEB50DB9A125CC908FDB71E12C2') # Daniel Stenberg
+
+_configure_options=(
+ --prefix='/usr'
+ --mandir='/usr/share/man'
+ --disable-ldap
+ --disable-ldaps
+ --disable-manual
+ --enable-ipv6
+ --enable-threaded-resolver
+ --with-gssapi
+ --with-libssh2
+ --with-openssl
+ --with-random='/dev/urandom'
+ --with-ca-bundle='/etc/ssl/certs/ca-certificates.crt'
+)
+
+prepare() {
+ cd "${srcdir}/${pkgbase}-${pkgver}"
+ # https://github.com/curl/curl/issues/8626
+ patch -Np1 -i ../0001-http2-handle-DONE-called-for-the-paused-stream.patch
+ patch -Np1 -i ../0002-http-close-the-stream-not-connection-on-time-conditi.patch
+ patch -Np1 -i ../0003-http2-RST-the-stream-if-we-stop-it-on-our-own-will.patch
+}
+
+build() {
+ mkdir build-curl{,-compat,-gnutls}
+
+ # build curl
+ cd "${srcdir}"/build-curl
+
+ "${srcdir}/${pkgbase}-${pkgver}"/configure \
+ "${_configure_options[@]}" \
+ --enable-versioned-symbols
+ sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+ make
+
+ # build libcurl-compat
+ cd "${srcdir}"/build-curl-compat
+
+ "${srcdir}/${pkgbase}-${pkgver}"/configure \
+ "${_configure_options[@]}" \
+ --disable-versioned-symbols
+ sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+ make -C lib
+
+ # build libcurl-gnutls
+ cd "${srcdir}"/build-curl-gnutls
+
+ "${srcdir}/${pkgbase}-${pkgver}"/configure \
+ "${_configure_options[@]}" \
+ --disable-versioned-symbols \
+ --without-ssl \
+ --with-gnutls='/usr'
+ sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+ make -C lib
+}
+
+package_curl() {
+ cd build-curl
+
+ make DESTDIR="${pkgdir}" install
+ make DESTDIR="${pkgdir}" install -C scripts
+
+ cd "${srcdir}/${pkgname}-${pkgver}"
+
+ # license
+ install -Dt "${pkgdir}/usr/share/licenses/$pkgname" -m0644 COPYING
+}
+
+package_libcurl-compat() {
+ pkgdesc='An URL retrieval library (without versioned symbols)'
+ depends=('curl' 'openssl')
+
+ cd "${srcdir}"/build-curl-compat
+
+ make -C lib DESTDIR="${pkgdir}" install
+
+ mv "${pkgdir}"/usr/lib/libcurl{,-compat}.so.4.7.0
+ rm "${pkgdir}"/usr/lib/libcurl.{a,so}*
+ for version in 3 4.0.0 4.1.0 4.2.0 4.3.0 4.4.0 4.5.0 4.6.0; do
+ ln -s libcurl-compat.so.4.7.0 "${pkgdir}"/usr/lib/libcurl.so.${version}
+ done
+
+ install -dm 0755 "${pkgdir}"/usr/share/licenses
+ ln -s curl "${pkgdir}"/usr/share/licenses/libcurl-compat
+}
+
+package_libcurl-gnutls() {
+ pkgdesc='An URL retrieval library (without versioned symbols and linked against gnutls)'
+ depends=('curl' 'gnutls')
+
+ cd "${srcdir}"/build-curl-gnutls
+
+ make -C lib DESTDIR="${pkgdir}" install
+
+ mv "${pkgdir}"/usr/lib/libcurl{,-gnutls}.so.4.7.0
+ rm "${pkgdir}"/usr/lib/libcurl.{a,so}*
+ for version in 3 4 4.0.0 4.1.0 4.2.0 4.3.0 4.4.0 4.5.0 4.6.0; do
+ ln -s libcurl-gnutls.so.4.7.0 "${pkgdir}"/usr/lib/libcurl-gnutls.so.${version}
+ done
+
+ install -dm 0755 "${pkgdir}"/usr/share/licenses
+ ln -s curl "${pkgdir}"/usr/share/licenses/libcurl-gnutls
+}
More information about the arch-commits
mailing list