Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(839)

Unified Diff: net/spdy/header_coalescer_test.cc

Issue 2710053002: HTTP/2 Check header names in HeaderCoalescer (Closed)
Patch Set: add tests Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« net/spdy/header_coalescer.cc ('K') | « net/spdy/header_coalescer.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/spdy/header_coalescer_test.cc
diff --git a/net/spdy/header_coalescer_test.cc b/net/spdy/header_coalescer_test.cc
index 986e775321076f8d89cce04affe463970df0a604..a1c9cf9d21fbbbac8896c79fda206f41db4cd6de 100644
--- a/net/spdy/header_coalescer_test.cc
+++ b/net/spdy/header_coalescer_test.cc
@@ -7,6 +7,7 @@
#include <string>
#include "base/strings/string_piece.h"
Bence 2017/02/23 23:33:04 In header_coalescer.h, HeaderCoalescer::OnHeader()
xunjieli 2017/02/24 16:33:32 base::StringPiece is used on line 70.
Bence 2017/02/24 16:51:30 header_coalescer.h also uses base::StringPiece, an
xunjieli 2017/02/24 17:36:55 Bence, I think this test file should include strin
Bence 2017/02/24 18:48:29 Good question. The style guide (https://google.gi
+#include "base/strings/stringprintf.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -76,5 +77,58 @@ TEST_F(HeaderCoalescerTest, CRLFInHeaderValue) {
EXPECT_TRUE(header_coalescer_.error_seen());
}
+TEST_F(HeaderCoalescerTest, HeaderNameNotValid) {
+ std::string header_name("\x01\x7F\x80\xff");
+ header_coalescer_.OnHeader(header_name, "foo");
+ EXPECT_TRUE(header_coalescer_.error_seen());
+}
+
+// RFC 7230 Section 3.2. Valid header name is defined as:
+// field-name = token
+// where token is any visible US ASCII characters.
asanka 2017/02/23 23:18:54 |token| is defined in RFC 7230 Appendix B as: tch
Bence 2017/02/23 23:33:04 Section 3.2.6 might be a more specific reference f
xunjieli 2017/02/24 16:33:32 Acknowledged.
xunjieli 2017/02/24 16:33:32 Done.
+TEST_F(HeaderCoalescerTest, HeaderNameValid) {
+ std::string header_name(
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!#$%&'*+-."
+ "^_`|~");
+ header_coalescer_.OnHeader(header_name, "foo");
+ EXPECT_FALSE(header_coalescer_.error_seen());
+ SpdyHeaderBlock header_block = header_coalescer_.release_headers();
+ EXPECT_THAT(header_block, ElementsAre(Pair(header_name, "foo")));
+}
+
+// RFC 7230 Section 3.2. Valid header value is defined as:
+// field-value = *( field-content / obs-fold )
+// field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]
+// field-vchar = VCHAR / obs-text
+//
+// obs-fold = CRLF 1*( SP / HTAB )
+// ; obsolete line folding
+// ; see Section 3.2.4
+TEST_F(HeaderCoalescerTest, HeaderValueValid) {
+ // Add two header, one with an HTAB and one with a SP.
Bence 2017/02/23 23:33:04 s/header/headers/
xunjieli 2017/02/24 16:33:32 Done.
+ std::string header_values[2];
+ char prefixes[] = {'\t', ' '};
+ for (int i = 0; i < 2; ++i) {
+ std::vector<char> value;
+ value.push_back(prefixes[i]);
+ // obs-text. From 0x80 to 0xff.
+ for (int j = 0x80; j <= 0xff; j++) {
+ value.push_back(j);
+ }
+ header_values[i] = std::string(value.data());
+ header_values[i].append(
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!#$%&'*+"
+ "-.^_`|~");
asanka 2017/02/23 23:18:54 This should be VCHAR, which is defined in RFC 5234
xunjieli 2017/02/24 16:33:32 Done.
+ header_coalescer_.OnHeader(base::StringPrintf("%s_%d", "foo", i),
+ header_values[i]);
+ EXPECT_FALSE(header_coalescer_.error_seen());
+ }
+ SpdyHeaderBlock header_block = header_coalescer_.release_headers();
+ EXPECT_THAT(header_block,
+ ElementsAre(Pair("foo_0", header_values[0]),
+ Pair("foo_1", header_values[1])));
+}
+
} // namespace test
+
} // namespace net
« net/spdy/header_coalescer.cc ('K') | « net/spdy/header_coalescer.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698