This is an automated email from the ASF dual-hosted git repository.
remm pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/master by this push:
new 8efcc6c Fix use of multiple parameters when defining RewriteMaps
8efcc6c is described below
commit 8efcc6c9cd072bd270895c642938e268f452922c
Author: remm <[email protected]>
AuthorDate: Tue May 19 16:12:30 2020 +0200
Fix use of multiple parameters when defining RewriteMaps
Missing part of PR #221.
---
.../catalina/valves/rewrite/LocalStrings.properties | 2 ++
java/org/apache/catalina/valves/rewrite/RewriteMap.java | 5 ++++-
java/org/apache/catalina/valves/rewrite/RewriteValve.java | 15 ++++++++++-----
.../apache/catalina/valves/rewrite/TestRewriteValve.java | 6 ++++++
.../apache/catalina/valves/rewrite/TesterRewriteMapA.java | 6 +++++-
webapps/docs/changelog.xml | 4 ++++
6 files changed, 31 insertions(+), 7 deletions(-)
diff --git a/java/org/apache/catalina/valves/rewrite/LocalStrings.properties
b/java/org/apache/catalina/valves/rewrite/LocalStrings.properties
index e67d4ba..c7541e7 100644
--- a/java/org/apache/catalina/valves/rewrite/LocalStrings.properties
+++ b/java/org/apache/catalina/valves/rewrite/LocalStrings.properties
@@ -15,6 +15,8 @@
quotedStringTokenizer.tokenizeError=Error tokenizing text [{0}] after position
[{1}] from mode [{2}]
+rewriteMap.tooManyParameters=Too many parameters for this map
+
rewriteValve.closeError=Error closing configuration
rewriteValve.invalidFlags=Invalid flag in [{0}] flags [{1}]
rewriteValve.invalidLine=Invalid line [{0}]
diff --git a/java/org/apache/catalina/valves/rewrite/RewriteMap.java
b/java/org/apache/catalina/valves/rewrite/RewriteMap.java
index 43315e7..5ca73e7 100644
--- a/java/org/apache/catalina/valves/rewrite/RewriteMap.java
+++ b/java/org/apache/catalina/valves/rewrite/RewriteMap.java
@@ -16,6 +16,8 @@
*/
package org.apache.catalina.valves.rewrite;
+import org.apache.tomcat.util.res.StringManager;
+
/**
* Interface for user defined lookup/replacement logic that can be defined in
* a {@code rewrite.config} file by a {@code RewriteMap} directive. Such a map
@@ -56,7 +58,8 @@ public interface RewriteMap {
return;
}
if (params.length > 1) {
- throw new IllegalArgumentException("Too many parameters for this
map");
+ throw new IllegalArgumentException(
+
StringManager.getManager(RewriteMap.class).getString("rewriteMap.tooManyParameters"));
}
setParameters(params[0]);
}
diff --git a/java/org/apache/catalina/valves/rewrite/RewriteValve.java
b/java/org/apache/catalina/valves/rewrite/RewriteValve.java
index 20d8ba0..d2c40a6 100644
--- a/java/org/apache/catalina/valves/rewrite/RewriteValve.java
+++ b/java/org/apache/catalina/valves/rewrite/RewriteValve.java
@@ -630,12 +630,17 @@ public class RewriteValve extends ValveBase {
throw new
IllegalArgumentException(sm.getString("rewriteValve.invalidMapClassName",
line));
}
if (tokenizer.hasMoreTokens()) {
- map.setParameters(tokenizer.nextToken());
+ if (tokenizer.countTokens() == 1) {
+ map.setParameters(tokenizer.nextToken());
+ } else {
+ List<String> params = new ArrayList<>();
+ while (tokenizer.hasMoreTokens()) {
+ params.add(tokenizer.nextToken());
+ }
+ map.setParameters(params.toArray(new String[0]));
+ }
}
- Object[] result = new Object[2];
- result[0] = name;
- result[1] = map;
- return result;
+ return new Object[] { name, map };
} else if (token.startsWith("#")) {
// it's a comment, ignore it
} else {
diff --git a/test/org/apache/catalina/valves/rewrite/TestRewriteValve.java
b/test/org/apache/catalina/valves/rewrite/TestRewriteValve.java
index 134f45a..4c9a97c 100644
--- a/test/org/apache/catalina/valves/rewrite/TestRewriteValve.java
+++ b/test/org/apache/catalina/valves/rewrite/TestRewriteValve.java
@@ -107,6 +107,12 @@ public class TestRewriteValve extends TomcatBaseTest {
}
@Test
+ public void testRewriteMap07() throws Exception {
+ doTestRewrite("RewriteMap mapa
org.apache.catalina.valves.rewrite.TesterRewriteMapA foo bar\n" +
+ "RewriteRule /b/.* /c/${mapa:${mapa:a}}", "/b/a.html",
"/c/aaaa");
+ }
+
+ @Test
public void testRewriteServerVar() throws Exception {
doTestRewrite("RewriteRule /b/(.*).html$ /c%{SERVLET_PATH}",
"/b/x.html", "/c/b/x.html");
}
diff --git a/test/org/apache/catalina/valves/rewrite/TesterRewriteMapA.java
b/test/org/apache/catalina/valves/rewrite/TesterRewriteMapA.java
index 4be8fd7..0e0c5cc 100644
--- a/test/org/apache/catalina/valves/rewrite/TesterRewriteMapA.java
+++ b/test/org/apache/catalina/valves/rewrite/TesterRewriteMapA.java
@@ -31,8 +31,12 @@ public class TesterRewriteMapA implements RewriteMap {
@Override
public String setParameters(String params) {
+ throw new IllegalStateException();
+ }
+
+ @Override
+ public void setParameters(String... params) {
// NO-OP
- return null;
}
@Override
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 69e3336..bf30ab6 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -52,6 +52,10 @@
of multi-line configuration in the RewriteValve. Patch provided by Jj.
(markt)
</fix>
+ <fix>
+ Fix use of multiple parameters when defining RewriteMaps.
+ (remm/fschumacher)
+ </fix>
</changelog>
</subsection>
<subsection name="Coyote">
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]