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 <r...@apache.org>
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: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to