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) {