summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2019-09-30 09:30:58 +0200
committerDaniel Stenberg <daniel@haxx.se>2019-10-03 22:55:42 +0200
commit8a00560de2804fa8ab639c6e895ed3a7f1e75efc (patch)
tree191b93799f7f84f94dc8744f49d8eda8476c2807
parent02c6b984cb7a2e01f290544a53a24d30fc7ab32e (diff)
downloadcurl-8a00560de2804fa8ab639c6e895ed3a7f1e75efc.tar.gz
http2: move state-init from creation to pre-transfer
To make sure that the HTTP/2 state is initialized correctly for duplicated handles. It would otherwise easily generate "spurious" PRIORITY frames to get sent over HTTP/2 connections when duplicated easy handles were used. Reported-by: Daniel Silverstone Fixes #4303 Closes #4442
-rw-r--r--lib/http2.c1
-rw-r--r--lib/transfer.c1
-rw-r--r--lib/url.c2
3 files changed, 2 insertions, 2 deletions
diff --git a/lib/http2.c b/lib/http2.c
index d2f5da17a..b5b831b56 100644
--- a/lib/http2.c
+++ b/lib/http2.c
@@ -1537,6 +1537,7 @@ static int h2_session_send(struct Curl_easy *data,
H2BUGF(infof(data, "Queuing PRIORITY on stream %u (easy %p)\n",
stream->stream_id, data));
+ DEBUGASSERT(stream->stream_id != -1);
rv = nghttp2_submit_priority(h2, NGHTTP2_FLAG_NONE, stream->stream_id,
&pri_spec);
if(rv)
diff --git a/lib/transfer.c b/lib/transfer.c
index 421c8d2d0..d0d4aeb50 100644
--- a/lib/transfer.c
+++ b/lib/transfer.c
@@ -1510,6 +1510,7 @@ CURLcode Curl_pretransfer(struct Curl_easy *data)
}
}
#endif
+ Curl_http2_init_state(&data->state);
}
return result;
diff --git a/lib/url.c b/lib/url.c
index 031f8f0c4..8538d24dd 100644
--- a/lib/url.c
+++ b/lib/url.c
@@ -619,8 +619,6 @@ CURLcode Curl_open(struct Curl_easy **curl)
data->progress.flags |= PGRS_HIDE;
data->state.current_speed = -1; /* init to negative == impossible */
-
- Curl_http2_init_state(&data->state);
}
}