This is an automated email from the ASF dual-hosted git repository. rmaucher pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/tomcat.git
commit 75de619b0f2f3987b36ca6826f44b9ae9854e1c1 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 a3bac43412..5d849b6338 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]
