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