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

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

commit 3bce6f88d1c23768dd8fab2dc82b255e84beb3e4
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 a5f269f2dc..c6d5f7ee79 100644
--- a/java/org/apache/catalina/valves/rewrite/RewriteValve.java
+++ b/java/org/apache/catalina/valves/rewrite/RewriteValve.java
@@ -694,6 +694,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]
@@ -718,6 +722,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 f5d3105c6d..7a7852cee4 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