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

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

commit 4127dc6326cd499c1417c0717e5687e179c68090
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 b3ac671600..d41fb6ffd4 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 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