You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by ma...@apache.org on 2017/05/06 02:35:30 UTC
[trafficserver] branch master updated: h2spec: The endpoint MUST
ignore any flags that is undefined.
This is an automated email from the ASF dual-hosted git repository.
maskit 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 0d39b4a h2spec: The endpoint MUST ignore any flags that is undefined.
0d39b4a is described below
commit 0d39b4a2c07ae81954087acefeb029222a6381f2
Author: Zizhong Zhang <zi...@linkedin.com>
AuthorDate: Mon May 1 18:01:56 2017 -0700
h2spec: The endpoint MUST ignore any flags that is undefined.
---
proxy/http2/HTTP2.cc | 24 +++++++-----------------
proxy/http2/HTTP2.h | 6 ------
2 files changed, 7 insertions(+), 23 deletions(-)
diff --git a/proxy/http2/HTTP2.cc b/proxy/http2/HTTP2.cc
index 31b013d..42a8c1b 100644
--- a/proxy/http2/HTTP2.cc
+++ b/proxy/http2/HTTP2.cc
@@ -124,25 +124,9 @@ memcpy_and_advance(uint8_t(&dst), byte_pointer &src)
++src.u8;
}
-static bool
-http2_frame_flags_are_valid(uint8_t ftype, uint8_t fflags)
-{
- if (ftype >= HTTP2_FRAME_TYPE_MAX) {
- // Skip validation for Unkown frame type - [RFC 7540] 5.5. Extending HTTP/2
- return true;
- }
-
- // The frame flags are valid for this frame if nothing outside the defined bits is set.
- return (fflags & ~HTTP2_FRAME_FLAGS_MASKS[ftype]) == 0;
-}
-
bool
http2_frame_header_is_valid(const Http2FrameHeader &hdr, unsigned max_frame_size)
{
- if (!http2_frame_flags_are_valid(hdr.type, hdr.flags)) {
- return false;
- }
-
// 6.1 If a DATA frame is received whose stream identifier field is 0x0, the recipient MUST
// respond with a connection error (Section 5.4.1) of type PROTOCOL_ERROR.
if (hdr.type == HTTP2_FRAME_TYPE_DATA && hdr.streamid == 0) {
@@ -915,13 +899,19 @@ const static struct {
{HTTP2_FRAME_TYPE_MAX, 0x40, true},
{HTTP2_FRAME_TYPE_MAX, 0x80, true}};
+static const uint8_t HTTP2_FRAME_FLAGS_MASKS[HTTP2_FRAME_TYPE_MAX] = {
+ HTTP2_FLAGS_DATA_MASK, HTTP2_FLAGS_HEADERS_MASK, HTTP2_FLAGS_PRIORITY_MASK, HTTP2_FLAGS_RST_STREAM_MASK,
+ HTTP2_FLAGS_SETTINGS_MASK, HTTP2_FLAGS_PUSH_PROMISE_MASK, HTTP2_FLAGS_PING_MASK, HTTP2_FLAGS_GOAWAY_MASK,
+ HTTP2_FLAGS_WINDOW_UPDATE_MASK, HTTP2_FLAGS_CONTINUATION_MASK,
+};
+
REGRESSION_TEST(HTTP2_FRAME_FLAGS)(RegressionTest *t, int, int *pstatus)
{
TestBox box(t, pstatus);
box = REGRESSION_TEST_PASSED;
for (auto i : http2_frame_flags_test_case) {
- box.check(http2_frame_flags_are_valid(i.ftype, i.fflags) == i.valid,
+ box.check((i.ftype >= HTTP2_FRAME_TYPE_MAX || (i.fflags & ~HTTP2_FRAME_FLAGS_MASKS[i.ftype]) == 0) == i.valid,
"Validation of frame flags (type: %d, flags: %d) are expected %d, but not", i.ftype, i.fflags, i.valid);
}
}
diff --git a/proxy/http2/HTTP2.h b/proxy/http2/HTTP2.h
index 96a8f38..34fd285 100644
--- a/proxy/http2/HTTP2.h
+++ b/proxy/http2/HTTP2.h
@@ -215,12 +215,6 @@ enum Http2FrameFlagsContinuation {
HTTP2_FLAGS_CONTINUATION_MASK = 0x04,
};
-static const uint8_t HTTP2_FRAME_FLAGS_MASKS[HTTP2_FRAME_TYPE_MAX] = {
- HTTP2_FLAGS_DATA_MASK, HTTP2_FLAGS_HEADERS_MASK, HTTP2_FLAGS_PRIORITY_MASK, HTTP2_FLAGS_RST_STREAM_MASK,
- HTTP2_FLAGS_SETTINGS_MASK, HTTP2_FLAGS_PUSH_PROMISE_MASK, HTTP2_FLAGS_PING_MASK, HTTP2_FLAGS_GOAWAY_MASK,
- HTTP2_FLAGS_WINDOW_UPDATE_MASK, HTTP2_FLAGS_CONTINUATION_MASK,
-};
-
// [RFC 7540] 6.5.2. Defined SETTINGS Parameters
enum Http2SettingsIdentifier {
HTTP2_SETTINGS_HEADER_TABLE_SIZE = 1,
--
To stop receiving notification emails like this one, please contact
['"commits@trafficserver.apache.org" <co...@trafficserver.apache.org>'].