Fixes up test coverage when strict path validation is not enabled.
We should have better coverage of this configuration.
PiperOrigin-RevId: 714160112
diff --git a/quiche/http2/adapter/header_validator_test.cc b/quiche/http2/adapter/header_validator_test.cc
index 6916f7e..5bab08c 100644
--- a/quiche/http2/adapter/header_validator_test.cc
+++ b/quiche/http2/adapter/header_validator_test.cc
@@ -5,6 +5,7 @@
#include <utility>
#include <vector>
+#include "absl/strings/escaping.h"
#include "absl/strings/str_cat.h"
#include "quiche/common/platform/api/quiche_test.h"
@@ -486,9 +487,6 @@
}
EXPECT_FALSE(v.FinishHeaderBlock(HeaderType::REQUEST));
- // The remainder of the checks require enabling path validation.
- v.SetValidatePath();
-
// A path that does not start with a slash should fail on finish.
v.StartHeaderBlock();
for (Header to_add : kSampleRequestPseudoheaders) {
@@ -504,11 +502,11 @@
// Various valid path characters.
for (const absl::string_view c :
- {"/", "?", "_", "'", "9", "&", "(", "@", ":"}) {
+ {"/", "?", "_", "'", "9", "&", "(", "@", ":", "<", ">", "\\", "[", "}",
+ "`", "\\", " ", "\t", "#"}) {
const std::string value = absl::StrCat("/shawa", c, "rma");
HeaderValidator validator;
- validator.SetValidatePath();
validator.StartHeaderBlock();
for (Header to_add : kSampleRequestPseudoheaders) {
if (to_add.first == ":path") {
@@ -524,11 +522,36 @@
}
// Various invalid path characters.
+ for (const absl::string_view c : {"\n", "\r"}) {
+ SCOPED_TRACE(absl::StrCat("char: ", absl::CEscape(c)));
+
+ 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_FIELD_INVALID,
+ validator.ValidateSingleHeader(to_add.first, value));
+ } else {
+ EXPECT_EQ(HeaderValidator::HEADER_OK,
+ validator.ValidateSingleHeader(to_add.first, to_add.second));
+ }
+ }
+ validator.FinishHeaderBlock(HeaderType::REQUEST);
+ }
+}
+
+TEST(HeaderValidatorTest, PathStrictValidation) {
+ // Various invalid path characters.
for (const absl::string_view c : {"[", "<", "}", "`", "\\", " ", "\t", "#"}) {
const std::string value = absl::StrCat("/shawa", c, "rma");
HeaderValidator validator;
+
+ // Required for strict path validation.
validator.SetValidatePath();
+
validator.StartHeaderBlock();
for (Header to_add : kSampleRequestPseudoheaders) {
if (to_add.first == ":path") {
@@ -545,7 +568,10 @@
// The fragment initial character can be explicitly allowed.
{
HeaderValidator validator;
+
+ // Required for strict path validation.
validator.SetValidatePath();
+
validator.SetAllowFragmentInPath();
validator.StartHeaderBlock();
for (Header to_add : kSampleRequestPseudoheaders) {