Adds HeaderValidator unit tests for valid and invalid path characters.
PiperOrigin-RevId: 535301294
diff --git a/quiche/http2/adapter/header_validator_test.cc b/quiche/http2/adapter/header_validator_test.cc
index 3dfbd96..6aaf974 100644
--- a/quiche/http2/adapter/header_validator_test.cc
+++ b/quiche/http2/adapter/header_validator_test.cc
@@ -446,6 +446,43 @@
}
}
EXPECT_FALSE(v.FinishHeaderBlock(HeaderType::REQUEST));
+
+ // Various valid path characters.
+ for (const absl::string_view c :
+ {"/", "?", "_", "'", "9", "&", "(", "@", ":"}) {
+ const std::string value = absl::StrCat("/shawa", c, "rma");
+
+ HeaderValidator validator;
+ validator.StartHeaderBlock();
+ for (Header to_add : kSampleRequestPseudoheaders) {
+ if (to_add.first == ":path") {
+ EXPECT_EQ(HeaderValidator::HEADER_OK,
+ validator.ValidateSingleHeader(to_add.first, value));
+ } else {
+ EXPECT_EQ(HeaderValidator::HEADER_OK,
+ validator.ValidateSingleHeader(to_add.first, to_add.second));
+ }
+ }
+ EXPECT_TRUE(validator.FinishHeaderBlock(HeaderType::REQUEST));
+ }
+
+ // BUG: Various invalid path characters.
+ for (const absl::string_view c : {"[", "<", "}", "`", "\\", " ", "\t"}) {
+ const std::string value = absl::StrCat("/shawa", c, "rma");
+
+ HeaderValidator validator;
+ validator.StartHeaderBlock();
+ for (Header to_add : kSampleRequestPseudoheaders) {
+ if (to_add.first == ":path") {
+ EXPECT_EQ(HeaderValidator::HEADER_OK,
+ validator.ValidateSingleHeader(to_add.first, value));
+ } else {
+ EXPECT_EQ(HeaderValidator::HEADER_OK,
+ validator.ValidateSingleHeader(to_add.first, to_add.second));
+ }
+ }
+ EXPECT_TRUE(validator.FinishHeaderBlock(HeaderType::REQUEST));
+ }
}
TEST(HeaderValidatorTest, ResponsePseudoHeaders) {