diff options
author | dartraiden <wowemuh@gmail.com> | 2023-07-26 15:20:15 +0300 |
---|---|---|
committer | dartraiden <wowemuh@gmail.com> | 2023-07-26 17:45:46 +0300 |
commit | f53a55e58dd7733f1176a0ac268b2df576778970 (patch) | |
tree | 37e4f2fda1ce457bba52fed3e19b5870d3dc388e /libs/libcurl/src/http2.c | |
parent | e0bf792776131deef8f2634fb3eeb8bd8239c059 (diff) |
libcurl: update to 8.2.1
Diffstat (limited to 'libs/libcurl/src/http2.c')
-rw-r--r-- | libs/libcurl/src/http2.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/libs/libcurl/src/http2.c b/libs/libcurl/src/http2.c index 00a5b107c0..c5528019b8 100644 --- a/libs/libcurl/src/http2.c +++ b/libs/libcurl/src/http2.c @@ -252,7 +252,7 @@ static CURLcode http2_data_setup(struct Curl_cfilter *cf, H2_STREAM_SEND_CHUNKS, BUFQ_OPT_NONE);
Curl_bufq_initp(&stream->recvbuf, &ctx->stream_bufcp,
H2_STREAM_RECV_CHUNKS, BUFQ_OPT_SOFT_LIMIT);
- Curl_dynhds_init(&stream->resp_trailers, 0, DYN_H2_TRAILERS);
+ Curl_dynhds_init(&stream->resp_trailers, 0, DYN_HTTP_REQUEST);
stream->resp_hds_len = 0;
stream->bodystarted = FALSE;
stream->status_code = -1;
@@ -2122,7 +2122,13 @@ static ssize_t cf_h2_send(struct Curl_cfilter *cf, struct Curl_easy *data, /* Call the nghttp2 send loop and flush to write ALL buffered data,
* headers and/or request body completely out to the network */
result = h2_progress_egress(cf, data);
- if(result == CURLE_AGAIN) {
+ /* if the stream has been closed in egress handling (nghttp2 does that
+ * when it does not like the headers, for example */
+ if(stream && stream->closed) {
+ nwritten = http2_handle_stream_close(cf, data, stream, err);
+ goto out;
+ }
+ else if(result == CURLE_AGAIN) {
blocked = 1;
}
else if(result) {
@@ -2130,14 +2136,14 @@ static ssize_t cf_h2_send(struct Curl_cfilter *cf, struct Curl_easy *data, nwritten = -1;
goto out;
}
- else if(!Curl_bufq_is_empty(&stream->sendbuf)) {
+ else if(stream && !Curl_bufq_is_empty(&stream->sendbuf)) {
/* although we wrote everything that nghttp2 wants to send now,
* there is data left in our stream send buffer unwritten. This may
* be due to the stream's HTTP/2 flow window being exhausted. */
blocked = 1;
}
- if(blocked) {
+ if(stream && blocked) {
/* Unable to send all data, due to connection blocked or H2 window
* exhaustion. Data is left in our stream buffer, or nghttp2's internal
* frame buffer or our network out buffer. */
|