]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
http2, http3: only return CURLE_PARTIAL_FILE when bytes were received
authorStefan Eissing <stefan@eissing.org>
Tue, 19 Mar 2024 15:06:40 +0000 (16:06 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Thu, 21 Mar 2024 08:36:23 +0000 (09:36 +0100)
- should resolve spurious pytest failures when stream were reset
  right after response header were received

Clsoes #13151

lib/http2.c
lib/vquic/curl_ngtcp2.c
lib/vquic/curl_osslq.c
lib/vquic/curl_quiche.c

index f3d4d2e111236506a7b4707c73ea418136b16cec..99d7f3b0e257282e19f21cf8f93e5661e20e5d53 100644 (file)
@@ -1666,7 +1666,7 @@ static ssize_t http2_handle_stream_close(struct Curl_cfilter *cf,
   }
   else if(stream->reset) {
     failf(data, "HTTP/2 stream %u was reset", stream->id);
-    *err = stream->bodystarted? CURLE_PARTIAL_FILE : CURLE_RECV_ERROR;
+    *err = data->req.bytecount? CURLE_PARTIAL_FILE : CURLE_HTTP2;
     return -1;
   }
 
@@ -1807,7 +1807,7 @@ static ssize_t stream_recv(struct Curl_cfilter *cf, struct Curl_easy *data,
           (ctx->conn_closed && Curl_bufq_is_empty(&ctx->inbufq)) ||
           (ctx->goaway && ctx->last_stream_id < stream->id)) {
     CURL_TRC_CF(data, cf, "[%d] returning ERR", stream->id);
-    *err = stream->bodystarted? CURLE_PARTIAL_FILE : CURLE_RECV_ERROR;
+    *err = data->req.bytecount? CURLE_PARTIAL_FILE : CURLE_HTTP2;
     nread = -1;
   }
 
index 4f5da87ab9de89b21ca51dee8112c3d22ae7d89d..6b6b8874cfffa7cb1fcec1e719cd4247cee74f36 100644 (file)
@@ -1032,7 +1032,7 @@ static ssize_t recv_closed_stream(struct Curl_cfilter *cf,
   if(stream->reset) {
     failf(data,
           "HTTP/3 stream %" PRId64 " reset by server", stream->id);
-    *err = stream->resp_hds_complete? CURLE_PARTIAL_FILE : CURLE_HTTP3;
+    *err = data->req.bytecount? CURLE_PARTIAL_FILE : CURLE_HTTP3;
     goto out;
   }
   else if(!stream->resp_hds_complete) {
index b638be3195bd3dcb26bf5eced61fdd0710b6f47f..1d53e2c11dc81bbf0890a8db9ca37d29f2690cf6 100644 (file)
@@ -1917,7 +1917,7 @@ static ssize_t recv_closed_stream(struct Curl_cfilter *cf,
   if(stream->reset) {
     failf(data,
           "HTTP/3 stream %" PRId64 " reset by server", stream->s.id);
-    *err = stream->resp_hds_complete? CURLE_PARTIAL_FILE : CURLE_HTTP3;
+    *err = data->req.bytecount? CURLE_PARTIAL_FILE : CURLE_HTTP3;
     goto out;
   }
   else if(!stream->resp_hds_complete) {
index 0763c083a2019f197f3e26058a4568176a3458eb..2ebc50c67591661ff9de4e3de6c94a04d6375bd4 100644 (file)
@@ -732,7 +732,7 @@ static ssize_t recv_closed_stream(struct Curl_cfilter *cf,
   if(stream->reset) {
     failf(data,
           "HTTP/3 stream %" PRId64 " reset by server", stream->id);
-    *err = stream->resp_got_header? CURLE_PARTIAL_FILE : CURLE_HTTP3;
+    *err = data->req.bytecount? CURLE_PARTIAL_FILE : CURLE_HTTP3;
     CURL_TRC_CF(data, cf, "[%" PRId64 "] cf_recv, was reset -> %d",
                 stream->id, *err);
   }