You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by zw...@apache.org on 2015/04/05 17:52:05 UTC
trafficserver git commit: TS-3495 Accept empty header field value
Repository: trafficserver
Updated Branches:
refs/heads/master d48289055 -> 3f311ce3a
TS-3495 Accept empty header field value
Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/3f311ce3
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/3f311ce3
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/3f311ce3
Branch: refs/heads/master
Commit: 3f311ce3aae432e3679a8efe0fa54231abea87f6
Parents: d482890
Author: Masakazu Kitajo <m4...@gmail.com>
Authored: Sun Apr 5 09:51:16 2015 -0600
Committer: Leif Hedstrom <zw...@apache.org>
Committed: Sun Apr 5 09:51:16 2015 -0600
----------------------------------------------------------------------
CHANGES | 3 +++
proxy/http2/HPACK.cc | 2 +-
proxy/http2/HTTP2.cc | 13 +++++++++++--
3 files changed, 15 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/3f311ce3/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index ab5ccb8..a7b766c 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,9 @@
-*- coding: utf-8 -*-
Changes with Apache Traffic Server 6.0.0
+ *) TS-3495: Accept empty header field value.
+ Author: Masakazu Kitajo <m4...@gmail.com>
+
*) [TS-3482] Fill the first SETTINGS frame correctly.
Author: Masakazu Kitajo <m4...@gmail.com>
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/3f311ce3/proxy/http2/HPACK.cc
----------------------------------------------------------------------
diff --git a/proxy/http2/HPACK.cc b/proxy/http2/HPACK.cc
index e7f1326..f12d7e4 100644
--- a/proxy/http2/HPACK.cc
+++ b/proxy/http2/HPACK.cc
@@ -530,7 +530,7 @@ decode_string(Arena &arena, char **str, uint32_t &str_length, const uint8_t *buf
int64_t len = 0;
len = decode_integer(encoded_string_len, p, buf_end, 7);
- if (len == HPACK_ERROR_COMPRESSION_ERROR || encoded_string_len == 0)
+ if (len == HPACK_ERROR_COMPRESSION_ERROR)
return HPACK_ERROR_COMPRESSION_ERROR;
p += len;
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/3f311ce3/proxy/http2/HTTP2.cc
----------------------------------------------------------------------
diff --git a/proxy/http2/HTTP2.cc b/proxy/http2/HTTP2.cc
index f6d4842..4df3e5d 100644
--- a/proxy/http2/HTTP2.cc
+++ b/proxy/http2/HTTP2.cc
@@ -690,15 +690,24 @@ http2_parse_header_fragment(HTTPHdr *hdr, IOVec iov, Http2DynamicTable &dynamic_
int name_len = 0;
const char *name = field->name_get(&name_len);
- // ':' started header name is only allowed for psuedo headers
+ // ':' started header name is only allowed for pseudo headers
if (hdr->fields_count() >= 4 && (name_len <= 0 || name[0] == ':')) {
// Decoded header field is invalid
return HPACK_ERROR_HTTP2_PROTOCOL_ERROR;
}
+ // :path pseudo header MUST NOT empty for http or https URIs
+ if (name_len == HPACK_LEN_PATH && strncmp(name, HPACK_VALUE_PATH, name_len) == 0) {
+ int value_len = 0;
+ field->value_get(&value_len);
+ if (value_len == 0) {
+ return HPACK_ERROR_HTTP2_PROTOCOL_ERROR;
+ }
+ }
+
// when The TE header field is received, it MUST NOT contain any
// value other than "trailers".
- if (name_len == MIME_LEN_TE && strncmp(name, MIME_FIELD_TE, name_len) == 0) {
+ if (static_cast<unsigned>(name_len) == MIME_LEN_TE && strncmp(name, MIME_FIELD_TE, name_len) == 0) {
int value_len = 0;
const char *value = field->value_get(&value_len);
char trailers[] = "trailers";