From 455a63c66f188598275e87d32de2c4e8e26b80cb Mon Sep 17 00:00:00 2001 From: Peng-Yu Chen Date: Mon, 10 May 2021 23:05:36 +0100 Subject: [PATCH] http2: skip immediate parsing of payload following protocol switch 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 | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/http2.c b/lib/http2.c index 661a4cbab..ac04d348c 100644 --- a/lib/http2.c +++ b/lib/http2.c @@ -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; }