]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
http2: skip immediate parsing of payload following protocol switch
authorPeng-Yu Chen <pengyu@libstarrify.so>
Mon, 10 May 2021 22:05:36 +0000 (23:05 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Tue, 11 May 2021 06:03:22 +0000 (08:03 +0200)
This is considered not harmful as a following http2_recv shall be
called very soon.

This is considered helpful in the specific situation where some
servers (e.g. nghttpx v1.43.0) may fulfill stream 1 immediately
following the return of HTTP status 101, other than waiting for
the client-side connection preface to arrive.

Fixes #7036
Closes #7040

lib/http2.c

index 661a4cbab0450e2b33230f18f25553856afc8572..ac04d348c4957040f696e1ffd6b2b7e40a661ddb 100644 (file)
@@ -2335,8 +2335,15 @@ CURLcode Curl_http2_switched(struct Curl_easy *data,
 
   DEBUGASSERT(httpc->nread_inbuf == 0);
 
-  if(-1 == h2_process_pending_input(data, httpc, &result))
-    return CURLE_HTTP2;
+  /* Good enough to call it an end once the remaining payload is copied to the
+   * connection buffer.
+   * Some servers (e.g. nghttpx v1.43.0) may fulfill stream 1 immediately
+   * following the protocol switch other than waiting for the client-side
+   * connection preface. If h2_process_pending_input is invoked here to parse
+   * the remaining payload, stream 1 would be marked as closed too early and
+   * thus ignored in http2_recv (following 252790c53).
+   * The logic in lib/http.c and lib/transfer.c guarantees a following
+   * http2_recv would be invoked very soon. */
 
   return CURLE_OK;
 }