This is an automated email from the ASF dual-hosted git repository.
masaori pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficserver.git
The following commit(s) were added to refs/heads/master by this push:
new 14d5b2ce40 Terminate H2 connection by COMPRESSION_ERROR (#11222)
14d5b2ce40 is described below
commit 14d5b2ce401446a13b2fef4ab8dbc7cf890acf25
Author: Masaori Koshiba <[email protected]>
AuthorDate: Fri Apr 12 08:16:09 2024 +0900
Terminate H2 connection by COMPRESSION_ERROR (#11222)
---
src/proxy/http2/Http2ConnectionState.cc | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/src/proxy/http2/Http2ConnectionState.cc
b/src/proxy/http2/Http2ConnectionState.cc
index 9bb38b097a..c15102e3c5 100644
--- a/src/proxy/http2/Http2ConnectionState.cc
+++ b/src/proxy/http2/Http2ConnectionState.cc
@@ -320,6 +320,13 @@ Http2ConnectionState::rcv_headers_frame(const Http2Frame
&frame)
stream = this->create_stream(stream_id, error);
new_stream = true;
if (!stream) {
+ // Terminate the connection with COMPRESSION_ERROR because we don't
decompress the field block in this HEADERS frame.
+ // TODO: try to decompress to keep HPACK Dynamic Table in sync.
+ if (error.cls == Http2ErrorClass::HTTP2_ERROR_CLASS_STREAM) {
+ return Http2Error(Http2ErrorClass::HTTP2_ERROR_CLASS_CONNECTION,
Http2ErrorCode::HTTP2_ERROR_COMPRESSION_ERROR,
+ error.msg);
+ }
+
return error;
}
}
@@ -377,7 +384,7 @@ Http2ConnectionState::rcv_headers_frame(const Http2Frame
&frame)
}
// Protocol error if the stream depends on itself
if (stream_id == params.priority.stream_dependency) {
- return Http2Error(Http2ErrorClass::HTTP2_ERROR_CLASS_STREAM,
Http2ErrorCode::HTTP2_ERROR_PROTOCOL_ERROR,
+ return Http2Error(Http2ErrorClass::HTTP2_ERROR_CLASS_CONNECTION,
Http2ErrorCode::HTTP2_ERROR_COMPRESSION_ERROR,
"recv headers self dependency");
}