upg archlinux-keyring curl libgpg-error
This commit is contained in:
parent
494c79f9ce
commit
876525ff89
8 changed files with 387 additions and 27 deletions
|
@ -6,8 +6,7 @@
|
|||
#-----------------------------------------| DESCRIPTION |---------------------------------------
|
||||
|
||||
pkgname=archlinux-keyring
|
||||
_tag='0717024a39e47722c6bf2929a6d3ab1e2f132b9d' # git rev-parse ${pkgver}
|
||||
pkgver=20240313
|
||||
pkgver=20240427
|
||||
pkgrel=01
|
||||
pkgdesc='Arch Linux PGP keyring'
|
||||
url='https://gitlab.archlinux.org/archlinux/archlinux-keyring/'
|
||||
|
@ -16,8 +15,10 @@ groups=(base)
|
|||
depends=(pacman)
|
||||
makedepends=('git' 'python' 'sequoia-sq' 'pkgconf')
|
||||
checkdepends=('python-coverage' 'python-pytest')
|
||||
source=("archlinux-keyring::git+https://gitlab.archlinux.org/archlinux/archlinux-keyring.git#tag=${_tag}?signed")
|
||||
#source=("archlinux-keyring::git+https://gitlab.archlinux.org/archlinux/archlinux-keyring.git#tag=${_tag}?signed")
|
||||
## before 2022 source=(https://sources.archlinux.org/other/$pkgname/${pkgname}-${pkgver}.tar.gz{,.sig})
|
||||
source=("archlinux-keyring::git+https://gitlab.archlinux.org/archlinux/archlinux-keyring.git#tag=${pkgver}?signed")
|
||||
|
||||
build() {
|
||||
cd archlinux-keyring/
|
||||
|
||||
|
@ -53,7 +54,7 @@ validpgpkeys=('02FD1C7A934E614545849F19A6234074498E9CEE' # Christian Hesse <ewo
|
|||
'E240B57E2C4630BA768E2F26FC1B547C8D8172C8' # Levente Polyak <anthraxx@archlinux.org>
|
||||
'C100346676634E80C940FB9E9C02FF419FECBE16') # Morten Linderud <foxboron@archlinux.org>
|
||||
|
||||
sha256sums=(SKIP)
|
||||
sha256sums=(0ac2713e76c3f0fd344560ebb5871af2bd3e0b78eea88b9cdd87cb2910786785) # archlinux-keyring
|
||||
|
||||
## fe6ca1a658288a410af6fd222439606b4c7375c0a2875ada0a051fa654ad660c archlinux-keyring-20240313-01-x86_64.pkg.tar.lz
|
||||
## b906abc86d8a2b484731f820988b18ebf2a197cc5ba7aa74a56e7ece2fd6458b archlinux-keyring-20240427-01-x86_64.pkg.tar.lz
|
||||
|
||||
|
|
|
@ -2,8 +2,7 @@
|
|||
# Maintainer: Bartłomiej Piotrowski <bpiotrowski@archlinux.org>
|
||||
|
||||
pkgname=archlinux-keyring
|
||||
_tag='0717024a39e47722c6bf2929a6d3ab1e2f132b9d' # git rev-parse ${pkgver}
|
||||
pkgver=20240313
|
||||
pkgver=20240427
|
||||
pkgrel=1
|
||||
pkgdesc='Arch Linux PGP keyring'
|
||||
arch=('any')
|
||||
|
@ -13,8 +12,8 @@ install=$pkgname.install
|
|||
depends=('pacman')
|
||||
makedepends=('git' 'python' 'sequoia-sq' 'pkgconf' 'systemd')
|
||||
checkdepends=('python-coverage' 'python-pytest')
|
||||
source=("archlinux-keyring::git+https://gitlab.archlinux.org/archlinux/archlinux-keyring.git#tag=${_tag}?signed")
|
||||
sha256sums=('SKIP')
|
||||
source=("archlinux-keyring::git+https://gitlab.archlinux.org/archlinux/archlinux-keyring.git#tag=${pkgver}?signed")
|
||||
sha256sums=('0ac2713e76c3f0fd344560ebb5871af2bd3e0b78eea88b9cdd87cb2910786785')
|
||||
validpgpkeys=('02FD1C7A934E614545849F19A6234074498E9CEE' # Christian Hesse <eworm@archlinux.org>
|
||||
'C7E7849466FE2358343588377258734B41C31549' # David Runge <dvzrv@archlinux.org>
|
||||
'4AA4767BBC9C4B1D18AE28B77F2D434B9741E8AC' # Pierre Schmitz <pierre@archlinux.org>
|
||||
|
|
|
@ -11,7 +11,7 @@ pkgname=(curl libcurl-compat libcurl-gnutls)
|
|||
#_tag_name='8_6_0'
|
||||
#pkgver="${_tag_name//_/.}"
|
||||
pkgver=8.7.1
|
||||
pkgrel=05
|
||||
pkgrel=06
|
||||
pkgdesc='command line tool and library for transferring data with URLs - w/o ipv6 & zstd'
|
||||
url='https://curl.se'
|
||||
#options=(debug) # uncomment this to produce debug package
|
||||
|
@ -23,7 +23,8 @@ checkdepends=('valgrind')
|
|||
#source=("https://curl.haxx.se/download/${pkgname}-${pkgver}.tar.gz"{,.asc}
|
||||
#source=("git+https://github.com/curl/curl.git#tag=${_tag}?signed")
|
||||
source=("git+https://github.com/curl/curl.git#tag=curl-${pkgver//./_}?signed"
|
||||
'0001-bump-version-to-match-last-tag.patch')
|
||||
'0001-bump-version-to-match-last-tag.patch'
|
||||
'curl-8_7_1-h2-ngtcp2-write-error-handling.patch')
|
||||
|
||||
_backports=(
|
||||
# content_encoding: brotli and others, pass through 0-length writes
|
||||
|
@ -31,6 +32,10 @@ _backports=(
|
|||
|
||||
# http: with chunked POST forced, disable length check on read callback
|
||||
'721941aadf4adf4f6aeb3f4c0ab489bb89610c36'
|
||||
|
||||
# Fix CURLINFO_REQUEST_SIZE, add tests for transfer infos reported
|
||||
'2793acbfc5e89fb130b1d4e045cb6cd7b6549412'
|
||||
|
||||
)
|
||||
|
||||
_reverts=(
|
||||
|
@ -54,6 +59,9 @@ prepare() {
|
|||
done
|
||||
|
||||
patch -Np1 < ../0001-bump-version-to-match-last-tag.patch
|
||||
|
||||
# https://github.com/curl/curl/issues/13474 backported for 8.7.1
|
||||
patch -Np1 < ../curl-8_7_1-h2-ngtcp2-write-error-handling.patch
|
||||
|
||||
# no '-DEV' in version, release date from tagged commit...
|
||||
sed -i \
|
||||
|
@ -202,11 +210,11 @@ license=('MIT')
|
|||
validpgpkeys=('27EDEAF22F3ABCEB50DB9A125CC908FDB71E12C2') # Daniel Stenberg
|
||||
|
||||
sha512sums=('38b55dc916a64a1fd40a8af3e9a694ae918f8efb714430834491ebbe0ceeee4b58ba804afa15da966cbcf9cd7100ce373aed7b2101dff56f742996072caaf09a'
|
||||
'51df4903eff9f1a15b1317ea4a8ee2b8537f347984f2524f42213b09344cd6109c621a4b81b37d2fcf2027387bb81cf0a744a48e96b86c4e268c43261ff86845')
|
||||
'51df4903eff9f1a15b1317ea4a8ee2b8537f347984f2524f42213b09344cd6109c621a4b81b37d2fcf2027387bb81cf0a744a48e96b86c4e268c43261ff86845'
|
||||
'5af6c46ac6bfc39963d22450721f89770fd3ebbe198186c0a95ee3b16b8f89722d8d2d230ec21fdd9a52b949be5704c6980802e2052eec325085f60881f32c1f') # curl-8_7_1-h2-ngtcp2-write-error-handling.patch
|
||||
|
||||
sha256sums=(SKIP
|
||||
e05b46b3cea5ca4dfa39fdaa5d8f85095e5fc3dda9fc460cfdc002c5d7670357) # 0001-bump-version-to-match-last-tag.patch
|
||||
|
||||
## 707d1b2cd1d84f46439e0d720e6f39d6e121cd4bed31112e6e12a10c933a650c curl-8.7.1-05-x86_64.pkg.tar.lz
|
||||
## 097fab29fb30a437615f9d0a528a7a1b46848122733ca87a1a8a524b0963a70a libcurl-compat-8.7.1-05-x86_64.pkg.tar.lz
|
||||
## 18165f9126a620505adbd4579a693b68673d89ea651a3529a74891d1012404c8 libcurl-gnutls-8.7.1-05-x86_64.pkg.tar.lz
|
||||
e05b46b3cea5ca4dfa39fdaa5d8f85095e5fc3dda9fc460cfdc002c5d7670357 # 0001-bump-version-to-match-last-tag.patch
|
||||
f19681b7da011c39acb98d32103b3ce4eb18c943fc6620cfa435d1234cfb54b6) # curl-8_7_1-h2-ngtcp2-write-error-handling.patch
|
||||
|
||||
##
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
pkgbase=curl
|
||||
pkgname=(curl libcurl-compat libcurl-gnutls)
|
||||
pkgver=8.7.1
|
||||
pkgrel=5
|
||||
pkgrel=6
|
||||
pkgdesc='command line tool and library for transferring data with URLs'
|
||||
arch=('x86_64')
|
||||
url='https://curl.se/'
|
||||
|
@ -26,9 +26,11 @@ makedepends=('git' 'patchelf')
|
|||
checkdepends=('valgrind')
|
||||
validpgpkeys=('27EDEAF22F3ABCEB50DB9A125CC908FDB71E12C2') # Daniel Stenberg
|
||||
source=("git+https://github.com/curl/curl.git#tag=curl-${pkgver//./_}?signed"
|
||||
'0001-bump-version-to-match-last-tag.patch')
|
||||
'0001-bump-version-to-match-last-tag.patch'
|
||||
'curl-8_7_1-h2-ngtcp2-write-error-handling.patch')
|
||||
sha512sums=('38b55dc916a64a1fd40a8af3e9a694ae918f8efb714430834491ebbe0ceeee4b58ba804afa15da966cbcf9cd7100ce373aed7b2101dff56f742996072caaf09a'
|
||||
'51df4903eff9f1a15b1317ea4a8ee2b8537f347984f2524f42213b09344cd6109c621a4b81b37d2fcf2027387bb81cf0a744a48e96b86c4e268c43261ff86845')
|
||||
'51df4903eff9f1a15b1317ea4a8ee2b8537f347984f2524f42213b09344cd6109c621a4b81b37d2fcf2027387bb81cf0a744a48e96b86c4e268c43261ff86845'
|
||||
'5af6c46ac6bfc39963d22450721f89770fd3ebbe198186c0a95ee3b16b8f89722d8d2d230ec21fdd9a52b949be5704c6980802e2052eec325085f60881f32c1f')
|
||||
|
||||
_backports=(
|
||||
# content_encoding: brotli and others, pass through 0-length writes
|
||||
|
@ -36,6 +38,9 @@ _backports=(
|
|||
|
||||
# http: with chunked POST forced, disable length check on read callback
|
||||
'721941aadf4adf4f6aeb3f4c0ab489bb89610c36'
|
||||
|
||||
# Fix CURLINFO_REQUEST_SIZE, add tests for transfer infos reported
|
||||
'2793acbfc5e89fb130b1d4e045cb6cd7b6549412'
|
||||
)
|
||||
|
||||
_reverts=(
|
||||
|
@ -59,6 +64,9 @@ prepare() {
|
|||
done
|
||||
|
||||
patch -Np1 < ../0001-bump-version-to-match-last-tag.patch
|
||||
|
||||
# https://github.com/curl/curl/issues/13474 backported for 8.7.1
|
||||
patch -Np1 < ../curl-8_7_1-h2-ngtcp2-write-error-handling.patch
|
||||
|
||||
# no '-DEV' in version, release date from tagged commit...
|
||||
sed -i \
|
||||
|
|
345
curl/curl-8_7_1-h2-ngtcp2-write-error-handling.patch
Normal file
345
curl/curl-8_7_1-h2-ngtcp2-write-error-handling.patch
Normal file
|
@ -0,0 +1,345 @@
|
|||
diff --git a/lib/http2.c b/lib/http2.c
|
||||
index 99d7f3b0e..5eca075d7 100644
|
||||
--- a/lib/http2.c
|
||||
+++ b/lib/http2.c
|
||||
@@ -187,6 +187,7 @@ struct h2_stream_ctx {
|
||||
|
||||
int status_code; /* HTTP response status code */
|
||||
uint32_t error; /* stream error code */
|
||||
+ CURLcode xfer_result; /* Result of writing out response */
|
||||
uint32_t local_window_size; /* the local recv window size */
|
||||
int32_t id; /* HTTP/2 protocol identifier for stream */
|
||||
BIT(resp_hds_complete); /* we have a complete, final response */
|
||||
@@ -945,12 +946,39 @@ fail:
|
||||
return rv;
|
||||
}
|
||||
|
||||
-static CURLcode recvbuf_write_hds(struct Curl_cfilter *cf,
|
||||
+static void h2_xfer_write_resp_hd(struct Curl_cfilter *cf,
|
||||
struct Curl_easy *data,
|
||||
- const char *buf, size_t blen)
|
||||
+ struct h2_stream_ctx *stream,
|
||||
+ const char *buf, size_t blen, bool eos)
|
||||
{
|
||||
- (void)cf;
|
||||
- return Curl_xfer_write_resp(data, (char *)buf, blen, FALSE);
|
||||
+
|
||||
+ /* If we already encountered an error, skip further writes */
|
||||
+ if(!stream->xfer_result) {
|
||||
+ stream->xfer_result = Curl_xfer_write_resp(data, (char *)buf, blen, eos);
|
||||
+ if(stream->xfer_result)
|
||||
+ CURL_TRC_CF(data, cf, "[%d] error %d writing %zu bytes of headers",
|
||||
+ stream->id, stream->xfer_result, blen);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static void h2_xfer_write_resp(struct Curl_cfilter *cf,
|
||||
+ struct Curl_easy *data,
|
||||
+ struct h2_stream_ctx *stream,
|
||||
+ const char *buf, size_t blen, bool eos)
|
||||
+{
|
||||
+
|
||||
+ /* If we already encountered an error, skip further writes */
|
||||
+ if(!stream->xfer_result)
|
||||
+ stream->xfer_result = Curl_xfer_write_resp(data, (char *)buf, blen, eos);
|
||||
+ /* If the transfer write is errored, we do not want any more data */
|
||||
+ if(stream->xfer_result) {
|
||||
+ struct cf_h2_ctx *ctx = cf->ctx;
|
||||
+ CURL_TRC_CF(data, cf, "[%d] error %d writing %zu bytes of data, "
|
||||
+ "RST-ing stream",
|
||||
+ stream->id, stream->xfer_result, blen);
|
||||
+ nghttp2_submit_rst_stream(ctx->h2, 0, stream->id,
|
||||
+ NGHTTP2_ERR_CALLBACK_FAILURE);
|
||||
+ }
|
||||
}
|
||||
|
||||
static CURLcode on_stream_frame(struct Curl_cfilter *cf,
|
||||
@@ -960,7 +988,6 @@ static CURLcode on_stream_frame(struct Curl_cfilter *cf,
|
||||
struct cf_h2_ctx *ctx = cf->ctx;
|
||||
struct h2_stream_ctx *stream = H2_STREAM_CTX(data);
|
||||
int32_t stream_id = frame->hd.stream_id;
|
||||
- CURLcode result;
|
||||
int rv;
|
||||
|
||||
if(!stream) {
|
||||
@@ -1008,9 +1035,7 @@ static CURLcode on_stream_frame(struct Curl_cfilter *cf,
|
||||
stream->status_code = -1;
|
||||
}
|
||||
|
||||
- result = recvbuf_write_hds(cf, data, STRCONST("\r\n"));
|
||||
- if(result)
|
||||
- return result;
|
||||
+ h2_xfer_write_resp_hd(cf, data, stream, STRCONST("\r\n"), stream->closed);
|
||||
|
||||
if(stream->status_code / 100 != 1) {
|
||||
stream->resp_hds_complete = TRUE;
|
||||
@@ -1229,7 +1254,6 @@ static int on_data_chunk_recv(nghttp2_session *session, uint8_t flags,
|
||||
struct cf_h2_ctx *ctx = cf->ctx;
|
||||
struct h2_stream_ctx *stream;
|
||||
struct Curl_easy *data_s;
|
||||
- CURLcode result;
|
||||
(void)flags;
|
||||
|
||||
DEBUGASSERT(stream_id); /* should never be a zero stream ID here */
|
||||
@@ -1252,9 +1276,7 @@ static int on_data_chunk_recv(nghttp2_session *session, uint8_t flags,
|
||||
if(!stream)
|
||||
return NGHTTP2_ERR_CALLBACK_FAILURE;
|
||||
|
||||
- result = Curl_xfer_write_resp(data_s, (char *)mem, len, FALSE);
|
||||
- if(result && result != CURLE_AGAIN)
|
||||
- return NGHTTP2_ERR_CALLBACK_FAILURE;
|
||||
+ h2_xfer_write_resp(cf, data_s, stream, (char *)mem, len, FALSE);
|
||||
|
||||
nghttp2_session_consume(ctx->h2, stream_id, len);
|
||||
stream->nrcvd_data += (curl_off_t)len;
|
||||
@@ -1465,16 +1487,12 @@ static int on_header(nghttp2_session *session, const nghttp2_frame *frame,
|
||||
result = Curl_headers_push(data_s, buffer, CURLH_PSEUDO);
|
||||
if(result)
|
||||
return NGHTTP2_ERR_CALLBACK_FAILURE;
|
||||
- result = recvbuf_write_hds(cf, data_s, STRCONST("HTTP/2 "));
|
||||
- if(result)
|
||||
- return NGHTTP2_ERR_CALLBACK_FAILURE;
|
||||
- result = recvbuf_write_hds(cf, data_s, (const char *)value, valuelen);
|
||||
- if(result)
|
||||
- return NGHTTP2_ERR_CALLBACK_FAILURE;
|
||||
+ h2_xfer_write_resp_hd(cf, data_s, stream, STRCONST("HTTP/2 "), FALSE);
|
||||
+ h2_xfer_write_resp_hd(cf, data_s, stream,
|
||||
+ (const char *)value, valuelen, FALSE);
|
||||
/* the space character after the status code is mandatory */
|
||||
- result = recvbuf_write_hds(cf, data_s, STRCONST(" \r\n"));
|
||||
- if(result)
|
||||
- return NGHTTP2_ERR_CALLBACK_FAILURE;
|
||||
+ h2_xfer_write_resp_hd(cf, data_s, stream, STRCONST(" \r\n"), FALSE);
|
||||
+
|
||||
/* if we receive data for another handle, wake that up */
|
||||
if(CF_DATA_CURRENT(cf) != data_s)
|
||||
Curl_expire(data_s, 0, EXPIRE_RUN_NOW);
|
||||
@@ -1487,18 +1505,13 @@ static int on_header(nghttp2_session *session, const nghttp2_frame *frame,
|
||||
/* nghttp2 guarantees that namelen > 0, and :status was already
|
||||
received, and this is not pseudo-header field . */
|
||||
/* convert to an HTTP1-style header */
|
||||
- result = recvbuf_write_hds(cf, data_s, (const char *)name, namelen);
|
||||
- if(result)
|
||||
- return NGHTTP2_ERR_CALLBACK_FAILURE;
|
||||
- result = recvbuf_write_hds(cf, data_s, STRCONST(": "));
|
||||
- if(result)
|
||||
- return NGHTTP2_ERR_CALLBACK_FAILURE;
|
||||
- result = recvbuf_write_hds(cf, data_s, (const char *)value, valuelen);
|
||||
- if(result)
|
||||
- return NGHTTP2_ERR_CALLBACK_FAILURE;
|
||||
- result = recvbuf_write_hds(cf, data_s, STRCONST("\r\n"));
|
||||
- if(result)
|
||||
- return NGHTTP2_ERR_CALLBACK_FAILURE;
|
||||
+ h2_xfer_write_resp_hd(cf, data_s, stream,
|
||||
+ (const char *)name, namelen, FALSE);
|
||||
+ h2_xfer_write_resp_hd(cf, data_s, stream, STRCONST(": "), FALSE);
|
||||
+ h2_xfer_write_resp_hd(cf, data_s, stream,
|
||||
+ (const char *)value, valuelen, FALSE);
|
||||
+ h2_xfer_write_resp_hd(cf, data_s, stream, STRCONST("\r\n"), FALSE);
|
||||
+
|
||||
/* if we receive data for another handle, wake that up */
|
||||
if(CF_DATA_CURRENT(cf) != data_s)
|
||||
Curl_expire(data_s, 0, EXPIRE_RUN_NOW);
|
||||
@@ -1799,7 +1812,12 @@ static ssize_t stream_recv(struct Curl_cfilter *cf, struct Curl_easy *data,
|
||||
|
||||
(void)buf;
|
||||
*err = CURLE_AGAIN;
|
||||
- if(stream->closed) {
|
||||
+ if(stream->xfer_result) {
|
||||
+ CURL_TRC_CF(data, cf, "[%d] xfer write failed", stream->id);
|
||||
+ *err = stream->xfer_result;
|
||||
+ nread = -1;
|
||||
+ }
|
||||
+ else if(stream->closed) {
|
||||
CURL_TRC_CF(data, cf, "[%d] returning CLOSE", stream->id);
|
||||
nread = http2_handle_stream_close(cf, data, stream, err);
|
||||
}
|
||||
diff --git a/lib/vquic/curl_ngtcp2.c b/lib/vquic/curl_ngtcp2.c
|
||||
index 6b6b8874c..ff3b4e742 100644
|
||||
--- a/lib/vquic/curl_ngtcp2.c
|
||||
+++ b/lib/vquic/curl_ngtcp2.c
|
||||
@@ -152,6 +152,7 @@ struct h3_stream_ctx {
|
||||
uint64_t error3; /* HTTP/3 stream error code */
|
||||
curl_off_t upload_left; /* number of request bytes left to upload */
|
||||
int status_code; /* HTTP status code */
|
||||
+ CURLcode xfer_result; /* result from xfer_resp_write(_hd) */
|
||||
bool resp_hds_complete; /* we have a complete, final response */
|
||||
bool closed; /* TRUE on stream close */
|
||||
bool reset; /* TRUE on stream reset */
|
||||
@@ -759,10 +760,39 @@ static int cb_h3_stream_close(nghttp3_conn *conn, int64_t stream_id,
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static CURLcode write_resp_hds(struct Curl_easy *data,
|
||||
- const char *buf, size_t blen)
|
||||
+static void h3_xfer_write_resp_hd(struct Curl_cfilter *cf,
|
||||
+ struct Curl_easy *data,
|
||||
+ struct h3_stream_ctx *stream,
|
||||
+ const char *buf, size_t blen, bool eos)
|
||||
{
|
||||
- return Curl_xfer_write_resp(data, (char *)buf, blen, FALSE);
|
||||
+
|
||||
+ /* If we already encountered an error, skip further writes */
|
||||
+ if(!stream->xfer_result) {
|
||||
+ stream->xfer_result = Curl_xfer_write_resp(data, (char *)buf, blen, eos);
|
||||
+ if(stream->xfer_result)
|
||||
+ CURL_TRC_CF(data, cf, "[%"PRId64"] error %d writing %zu "
|
||||
+ "bytes of headers", stream->id, stream->xfer_result, blen);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static void h3_xfer_write_resp(struct Curl_cfilter *cf,
|
||||
+ struct Curl_easy *data,
|
||||
+ struct h3_stream_ctx *stream,
|
||||
+ const char *buf, size_t blen, bool eos)
|
||||
+{
|
||||
+
|
||||
+ /* If we already encountered an error, skip further writes */
|
||||
+ if(!stream->xfer_result)
|
||||
+ stream->xfer_result = Curl_xfer_write_resp(data, (char *)buf, blen, eos);
|
||||
+ /* If the transfer write is errored, we do not want any more data */
|
||||
+ if(stream->xfer_result) {
|
||||
+ struct cf_ngtcp2_ctx *ctx = cf->ctx;
|
||||
+ CURL_TRC_CF(data, cf, "[%"PRId64"] error %d writing %zu bytes "
|
||||
+ "of data, cancelling stream",
|
||||
+ stream->id, stream->xfer_result, blen);
|
||||
+ nghttp3_conn_close_stream(ctx->h3conn, stream->id,
|
||||
+ NGHTTP3_H3_REQUEST_CANCELLED);
|
||||
+ }
|
||||
}
|
||||
|
||||
static int cb_h3_recv_data(nghttp3_conn *conn, int64_t stream3_id,
|
||||
@@ -773,7 +803,6 @@ static int cb_h3_recv_data(nghttp3_conn *conn, int64_t stream3_id,
|
||||
struct cf_ngtcp2_ctx *ctx = cf->ctx;
|
||||
struct Curl_easy *data = stream_user_data;
|
||||
struct h3_stream_ctx *stream = H3_STREAM_CTX(data);
|
||||
- CURLcode result;
|
||||
|
||||
(void)conn;
|
||||
(void)stream3_id;
|
||||
@@ -781,12 +810,7 @@ static int cb_h3_recv_data(nghttp3_conn *conn, int64_t stream3_id,
|
||||
if(!stream)
|
||||
return NGHTTP3_ERR_CALLBACK_FAILURE;
|
||||
|
||||
- result = Curl_xfer_write_resp(data, (char *)buf, blen, FALSE);
|
||||
- if(result) {
|
||||
- CURL_TRC_CF(data, cf, "[%" PRId64 "] DATA len=%zu, ERROR receiving %d",
|
||||
- stream->id, blen, result);
|
||||
- return NGHTTP3_ERR_CALLBACK_FAILURE;
|
||||
- }
|
||||
+ h3_xfer_write_resp(cf, data, stream, (char *)buf, blen, FALSE);
|
||||
if(blen) {
|
||||
CURL_TRC_CF(data, cf, "[%" PRId64 "] ACK %zu bytes of DATA",
|
||||
stream->id, blen);
|
||||
@@ -819,7 +843,6 @@ static int cb_h3_end_headers(nghttp3_conn *conn, int64_t stream_id,
|
||||
struct Curl_cfilter *cf = user_data;
|
||||
struct Curl_easy *data = stream_user_data;
|
||||
struct h3_stream_ctx *stream = H3_STREAM_CTX(data);
|
||||
- CURLcode result = CURLE_OK;
|
||||
(void)conn;
|
||||
(void)stream_id;
|
||||
(void)fin;
|
||||
@@ -828,10 +851,7 @@ static int cb_h3_end_headers(nghttp3_conn *conn, int64_t stream_id,
|
||||
if(!stream)
|
||||
return 0;
|
||||
/* add a CRLF only if we've received some headers */
|
||||
- result = write_resp_hds(data, "\r\n", 2);
|
||||
- if(result) {
|
||||
- return -1;
|
||||
- }
|
||||
+ h3_xfer_write_resp_hd(cf, data, stream, STRCONST("\r\n"), stream->closed);
|
||||
|
||||
CURL_TRC_CF(data, cf, "[%" PRId64 "] end_headers, status=%d",
|
||||
stream_id, stream->status_code);
|
||||
@@ -874,7 +894,7 @@ static int cb_h3_recv_header(nghttp3_conn *conn, int64_t stream_id,
|
||||
ncopy = msnprintf(line, sizeof(line), "HTTP/3 %03d \r\n",
|
||||
stream->status_code);
|
||||
CURL_TRC_CF(data, cf, "[%" PRId64 "] status: %s", stream_id, line);
|
||||
- result = write_resp_hds(data, line, ncopy);
|
||||
+ h3_xfer_write_resp_hd(cf, data, stream, line, ncopy, FALSE);
|
||||
if(result) {
|
||||
return -1;
|
||||
}
|
||||
@@ -884,22 +904,12 @@ static int cb_h3_recv_header(nghttp3_conn *conn, int64_t stream_id,
|
||||
CURL_TRC_CF(data, cf, "[%" PRId64 "] header: %.*s: %.*s",
|
||||
stream_id, (int)h3name.len, h3name.base,
|
||||
(int)h3val.len, h3val.base);
|
||||
- result = write_resp_hds(data, (const char *)h3name.base, h3name.len);
|
||||
- if(result) {
|
||||
- return -1;
|
||||
- }
|
||||
- result = write_resp_hds(data, ": ", 2);
|
||||
- if(result) {
|
||||
- return -1;
|
||||
- }
|
||||
- result = write_resp_hds(data, (const char *)h3val.base, h3val.len);
|
||||
- if(result) {
|
||||
- return -1;
|
||||
- }
|
||||
- result = write_resp_hds(data, "\r\n", 2);
|
||||
- if(result) {
|
||||
- return -1;
|
||||
- }
|
||||
+ h3_xfer_write_resp_hd(cf, data, stream,
|
||||
+ (const char *)h3name.base, h3name.len, FALSE);
|
||||
+ h3_xfer_write_resp_hd(cf, data, stream, ": ", 2, FALSE);
|
||||
+ h3_xfer_write_resp_hd(cf, data, stream, (
|
||||
+ const char *)h3val.base, h3val.len, FALSE);
|
||||
+ h3_xfer_write_resp_hd(cf, data, stream, "\r\n", 2, FALSE);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -1083,7 +1093,13 @@ static ssize_t cf_ngtcp2_recv(struct Curl_cfilter *cf, struct Curl_easy *data,
|
||||
goto out;
|
||||
}
|
||||
|
||||
- if(stream->closed) {
|
||||
+ if(stream->xfer_result) {
|
||||
+ CURL_TRC_CF(data, cf, "[%" PRId64 "] xfer write failed", stream->id);
|
||||
+ *err = stream->xfer_result;
|
||||
+ nread = -1;
|
||||
+ goto out;
|
||||
+ }
|
||||
+ else if(stream->closed) {
|
||||
nread = recv_closed_stream(cf, data, stream, err);
|
||||
goto out;
|
||||
}
|
||||
diff --git a/tests/http/test_02_download.py b/tests/http/test_02_download.py
|
||||
index 4db9c9d36..4096d424d 100644
|
||||
--- a/tests/http/test_02_download.py
|
||||
+++ b/tests/http/test_02_download.py
|
||||
@@ -257,6 +257,34 @@ class TestDownload:
|
||||
])
|
||||
r.check_response(count=count, http_status=200)
|
||||
|
||||
+ @pytest.mark.parametrize("proto", ['h2', 'h3'])
|
||||
+ def test_02_14_not_found(self, env: Env, httpd, nghttpx, repeat, proto):
|
||||
+ if proto == 'h3' and not env.have_h3():
|
||||
+ pytest.skip("h3 not supported")
|
||||
+ if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
+ pytest.skip("msh3 stalls here")
|
||||
+ count = 10
|
||||
+ urln = f'https://{env.authority_for(env.domain1, proto)}/not-found?[0-{count-1}]'
|
||||
+ curl = CurlClient(env=env)
|
||||
+ r = curl.http_download(urls=[urln], alpn_proto=proto, extra_args=[
|
||||
+ '--parallel'
|
||||
+ ])
|
||||
+ r.check_stats(count=count, http_status=404, exitcode=0)
|
||||
+
|
||||
+ @pytest.mark.parametrize("proto", ['h2', 'h3'])
|
||||
+ def test_02_15_fail_not_found(self, env: Env, httpd, nghttpx, repeat, proto):
|
||||
+ if proto == 'h3' and not env.have_h3():
|
||||
+ pytest.skip("h3 not supported")
|
||||
+ if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
+ pytest.skip("msh3 stalls here")
|
||||
+ count = 10
|
||||
+ urln = f'https://{env.authority_for(env.domain1, proto)}/not-found?[0-{count-1}]'
|
||||
+ curl = CurlClient(env=env)
|
||||
+ r = curl.http_download(urls=[urln], alpn_proto=proto, extra_args=[
|
||||
+ '--fail'
|
||||
+ ])
|
||||
+ r.check_stats(count=count, http_status=404, exitcode=22)
|
||||
+
|
||||
@pytest.mark.skipif(condition=Env().slow_network, reason="not suitable for slow network tests")
|
||||
@pytest.mark.skipif(condition=Env().ci_run, reason="not suitable for CI runs")
|
||||
def test_02_20_h2_small_frames(self, env: Env, httpd, repeat):
|
|
@ -6,7 +6,7 @@
|
|||
#-----------------------------------------| DESCRIPTION |---------------------------------------
|
||||
|
||||
pkgname=libgpg-error
|
||||
pkgver=1.48
|
||||
pkgver=1.49
|
||||
pkgrel=01
|
||||
pkgdesc="Support library for libgcrypt"
|
||||
url="https://www.gnupg.org"
|
||||
|
@ -52,8 +52,8 @@ license=(LGPL-2.1-or-later 'BSD-3-Clause OR LGPL-2.1-or-later' FSFULLR GPL-2.0-o
|
|||
validpgpkeys=(6DAA6E64A76D2840571B4902528897B826403ADA # Werner Koch (dist signing 2020)
|
||||
AC8E115BF73E2D8D47FA9908E98E9B2D19C6C8BD) # Niibe Yutaka (GnuPG Release Key)
|
||||
|
||||
sha256sums=(89ce1ae893e122924b858de84dc4f67aae29ffa610ebf668d5aa539045663d6f # libgpg-error-1.48.tar.bz2
|
||||
a3f27cd6818fe01e559e59142b321ab41b155f8290c1cdc7aee53ee25049478d) # libgpg-error-1.48.tar.bz2.sig
|
||||
sha256sums=(8b79d54639dbf4abc08b5406fb2f37e669a2dec091dd024fb87dd367131c63a9 # libgpg-error-1.49.tar.bz2
|
||||
741dffea302c4d63cac90a03f14c8b74ac21bb0073c74aafd62ca2e4f7dd10d4) # libgpg-error-1.49.tar.bz2.sig
|
||||
|
||||
## e5ef67ec512377b09540fcc4f3c56be236d82452001cc5e7d8f5bc897508e09c libgpg-error-1.48-01-x86_64.pkg.tar.lz
|
||||
## 4f2e7101efd6e4fa484fbadfbb6127d11963c5e216f3d2b17eec1c6120a2846e libgpg-error-1.49-01-x86_64.pkg.tar.lz
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
# Contributor: judd <jvinet@zeroflux.org>
|
||||
|
||||
pkgname=libgpg-error
|
||||
pkgver=1.48
|
||||
pkgver=1.49
|
||||
pkgrel=1
|
||||
pkgdesc="Support library for libgcrypt"
|
||||
arch=(x86_64)
|
||||
|
@ -14,7 +14,7 @@ license=(LGPL-2.1-or-later
|
|||
depends=('glibc' 'sh')
|
||||
source=(https://www.gnupg.org/ftp/gcrypt/libgpg-error/${pkgname}-${pkgver}.tar.bz2{,.sig})
|
||||
# https://www.gnupg.org/download/integrity_check.html
|
||||
sha256sums=('89ce1ae893e122924b858de84dc4f67aae29ffa610ebf668d5aa539045663d6f'
|
||||
sha256sums=('8b79d54639dbf4abc08b5406fb2f37e669a2dec091dd024fb87dd367131c63a9'
|
||||
'SKIP')
|
||||
validpgpkeys=('6DAA6E64A76D2840571B4902528897B826403ADA') # Werner Koch (dist signing 2020)
|
||||
validpgpkeys+=('AC8E115BF73E2D8D47FA9908E98E9B2D19C6C8BD') # Niibe Yutaka (GnuPG Release Key)
|
||||
|
|
|
@ -3,4 +3,3 @@ gettext
|
|||
automake
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue