Author: markt Date: Mon Nov 28 14:05:11 2016 New Revision: 1771743 URL: http://svn.apache.org/viewvc?rev=1771743&view=rev Log: In the RewriteValve write empty capture groups as the empty string rather "null" when generating the re-written URL. Based on a patch by Michael Osipov.
Modified: tomcat/trunk/java/org/apache/catalina/valves/rewrite/Substitution.java tomcat/trunk/test/org/apache/catalina/valves/rewrite/TestRewriteValve.java tomcat/trunk/webapps/docs/changelog.xml Modified: tomcat/trunk/java/org/apache/catalina/valves/rewrite/Substitution.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/valves/rewrite/Substitution.java?rev=1771743&r1=1771742&r2=1771743&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/valves/rewrite/Substitution.java (original) +++ tomcat/trunk/java/org/apache/catalina/valves/rewrite/Substitution.java Mon Nov 28 14:05:11 2016 @@ -40,14 +40,18 @@ public class Substitution { public int n; @Override public String evaluate(Matcher rule, Matcher cond, Resolver resolver) { + String result = rule.group(n); + if (result == null) { + result = ""; + } if (escapeBackReferences) { // Note: This should be consistent with the way httpd behaves. // We might want to consider providing a dedicated decoder // with an option to add additional safe characters to // provide users with more flexibility - return RewriteValve.ENCODER.encode(rule.group(n), resolver.getUriEncoding()); + return RewriteValve.ENCODER.encode(result, resolver.getUriEncoding()); } else { - return rule.group(n); + return result; } } } @@ -56,7 +60,7 @@ public class Substitution { public int n; @Override public String evaluate(Matcher rule, Matcher cond, Resolver resolver) { - return cond.group(n); + return (cond.group(n) == null ? "" : cond.group(n)); } } @@ -95,7 +99,7 @@ public class Substitution { public class MapElement extends SubstitutionElement { public RewriteMap map = null; public String key; - public String defaultValue = null; + public String defaultValue = ""; public int n; @Override public String evaluate(Matcher rule, Matcher cond, Resolver resolver) { Modified: tomcat/trunk/test/org/apache/catalina/valves/rewrite/TestRewriteValve.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/valves/rewrite/TestRewriteValve.java?rev=1771743&r1=1771742&r2=1771743&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/catalina/valves/rewrite/TestRewriteValve.java (original) +++ tomcat/trunk/test/org/apache/catalina/valves/rewrite/TestRewriteValve.java Mon Nov 28 14:05:11 2016 @@ -554,6 +554,18 @@ public class TestRewriteValve extends To } + @Test + public void testBackReferenceRewrite() throws Exception { + doTestRewrite("RewriteRule ^/b/(rest)?$ /c/$1", "/b/rest", "/c/rest"); + } + + + @Test + public void testEmptyBackReferenceRewrite() throws Exception { + doTestRewrite("RewriteRule ^/b/(rest)?$ /c/$1", "/b/", "/c/"); + } + + private void doTestRewrite(String config, String request, String expectedURI) throws Exception { doTestRewrite(config, request, expectedURI, null); } Modified: tomcat/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1771743&r1=1771742&r2=1771743&view=diff ============================================================================== --- tomcat/trunk/webapps/docs/changelog.xml (original) +++ tomcat/trunk/webapps/docs/changelog.xml Mon Nov 28 14:05:11 2016 @@ -143,6 +143,12 @@ redirect response to the user agent. Patch provided by Michael Osipov. (markt) </fix> + <fix> + <bug>60413</bug>: In the <code>RewriteValve</code> write empty capture + groups as the empty string rather than as <code>"null"</code> + when generating the re-written URL. Based on a patch by Michael Osipov. + (markt) + </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