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