This is an automated email from the ASF dual-hosted git repository.

rmaucher pushed a commit to branch 9.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git

commit 86a4e04097af792a52281c9bfc3244dc6f25c340
Author: opencode <[email protected]>
AuthorDate: Mon Oct 12 14:01:42 2026 +0200

    Reject RewriteCond and RewriteRule lines with extra tokens
    
    The flag token was the last token expected on a RewriteCond or
    RewriteRule line. Any further tokens were discarded without an error,
    so a mis-tokenized or mistyped line silently behaved as if the extra
    tokens were not there instead of failing at configuration time.
    
    Throw the invalid line error when tokens remain after the flags, as is
    already done when a line does not provide enough tokens.
---
 java/org/apache/catalina/valves/rewrite/RewriteValve.java     |  8 ++++++++
 test/org/apache/catalina/valves/rewrite/TestRewriteValve.java | 10 ++++++++++
 2 files changed, 18 insertions(+)

diff --git a/java/org/apache/catalina/valves/rewrite/RewriteValve.java 
b/java/org/apache/catalina/valves/rewrite/RewriteValve.java
index 923f6d5e16..1f744ff49e 100644
--- a/java/org/apache/catalina/valves/rewrite/RewriteValve.java
+++ b/java/org/apache/catalina/valves/rewrite/RewriteValve.java
@@ -696,6 +696,10 @@ public class RewriteValve extends ValveBase {
                         parseCondFlag(line, condition, 
flagsTokenizer.nextToken());
                     }
                 }
+                if (tokenizer.hasMoreTokens()) {
+                    // Too many tokens on the line
+                    throw new 
IllegalArgumentException(sm.getString("rewriteValve.invalidLine", line));
+                }
                 return condition;
             } else if (token.equals("RewriteRule")) {
                 // RewriteRule Pattern Substitution [Flags]
@@ -720,6 +724,10 @@ public class RewriteValve extends ValveBase {
                         rule.setQsappend(false);
                     }
                 }
+                if (tokenizer.hasMoreTokens()) {
+                    // Too many tokens on the line
+                    throw new 
IllegalArgumentException(sm.getString("rewriteValve.invalidLine", line));
+                }
                 return rule;
             } else if (token.equals("RewriteMap")) {
                 // RewriteMap name rewriteMapClassName 
whateverOptionalParameterInWhateverFormat
diff --git a/test/org/apache/catalina/valves/rewrite/TestRewriteValve.java 
b/test/org/apache/catalina/valves/rewrite/TestRewriteValve.java
index d2a678e516..011ea5348c 100644
--- a/test/org/apache/catalina/valves/rewrite/TestRewriteValve.java
+++ b/test/org/apache/catalina/valves/rewrite/TestRewriteValve.java
@@ -280,6 +280,16 @@ public class TestRewriteValve extends TomcatBaseTest {
         doTestRewrite("RewriteRule /b/(.*).html$ /c%{SERVLET_PATH}", 
"/b/x.html", "/c/b/x.html");
     }
 
+    @Test(expected = IllegalArgumentException.class)
+    public void testRewriteRuleExtraToken() throws Exception {
+        doTestRewrite("RewriteRule /b/.* /c [L] extra", "/b/a.html", "/c");
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testRewriteCondExtraToken() throws Exception {
+        doTestRewrite("RewriteCond %{REQUEST_URI} ^/b.* [NC] extra\n" + 
"RewriteRule /b/.* /c", "/b/a.html", "/c");
+    }
+
     @Test
     public void testRewriteEnvVarAndServerVar() throws Exception {
         System.setProperty("some_variable", "something");


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to