Fix a crash in the client-side DoH code (header processing callback)
Support a situation in header processing callback when client side code could receive a belated response or part of it. That could happen when the HTTP/2 session was already closed, but there were some response data from server in flight. Other client-side nghttp2 callbacks code already handled this case. The bug became apparent after HTTP/2 write buffering was supported, leading to rare unit test failures.
This commit is contained in:
@@ -696,12 +696,22 @@ client_on_header_callback(nghttp2_session *ngsession,
|
||||
|
||||
REQUIRE(VALID_HTTP2_SESSION(session));
|
||||
REQUIRE(session->client);
|
||||
REQUIRE(!ISC_LIST_EMPTY(session->cstreams));
|
||||
|
||||
UNUSED(flags);
|
||||
UNUSED(ngsession);
|
||||
|
||||
cstream = find_http_cstream(frame->hd.stream_id, session);
|
||||
if (cstream == NULL) {
|
||||
/*
|
||||
* This could happen in two cases:
|
||||
* - the server sent us bad data, or
|
||||
* - we closed the session prematurely before receiving all
|
||||
* responses (i.e., because of a belated or partial response).
|
||||
*/
|
||||
return (NGHTTP2_ERR_CALLBACK_FAILURE);
|
||||
}
|
||||
|
||||
INSIST(!ISC_LIST_EMPTY(session->cstreams));
|
||||
|
||||
switch (frame->hd.type) {
|
||||
case NGHTTP2_HEADERS:
|
||||
|
||||
Reference in New Issue
Block a user