[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