Author: markt Date: Thu May 31 20:18:49 2012 New Revision: 1344890 URL: http://svn.apache.org/viewvc?rev=1344890&view=rev Log: Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=53257 BZ 53257 is partially a regression caused by r1152593 (the fix for BZ 51584) and partially an existing issue that had always been present. This patch: - reverts r1152593 - extends the test cases to cover BZ 53257 & BZ 51584 - correctly fixes BZ 53257 & BZ 51584 - fixes the additional issues the unit tests uncovered
Added: tomcat/trunk/test/webapp-3.0/bug53257/foo#bar.txt - copied unchanged from r1344868, tomcat/trunk/test/webapp-3.0/bug53257/foo#bar tomcat/trunk/test/webapp-3.0/bug53257/foo&bar.txt - copied unchanged from r1344868, tomcat/trunk/test/webapp-3.0/bug53257/foo&bar tomcat/trunk/test/webapp-3.0/bug53257/foo+bar.txt - copied unchanged from r1344868, tomcat/trunk/test/webapp-3.0/bug53257/foo+bar tomcat/trunk/test/webapp-3.0/bug53257/foo;bar.txt - copied unchanged from r1344868, tomcat/trunk/test/webapp-3.0/bug53257/foo;bar Removed: tomcat/trunk/test/webapp-3.0/bug53257/foo#bar tomcat/trunk/test/webapp-3.0/bug53257/foo&bar tomcat/trunk/test/webapp-3.0/bug53257/foo+bar tomcat/trunk/test/webapp-3.0/bug53257/foo;bar Modified: tomcat/trunk/java/org/apache/catalina/core/ApplicationContext.java tomcat/trunk/java/org/apache/naming/resources/DirContextURLConnection.java tomcat/trunk/res/checkstyle/org-import-control.xml tomcat/trunk/test/org/apache/jasper/compiler/TestCompiler.java tomcat/trunk/test/webapp-3.0/bug53257/index.jsp Modified: tomcat/trunk/java/org/apache/catalina/core/ApplicationContext.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/ApplicationContext.java?rev=1344890&r1=1344889&r2=1344890&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/core/ApplicationContext.java (original) +++ tomcat/trunk/java/org/apache/catalina/core/ApplicationContext.java Thu May 31 20:18:49 2012 @@ -14,14 +14,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - - package org.apache.catalina.core; - import java.io.InputStream; import java.lang.reflect.InvocationTargetException; import java.net.MalformedURLException; +import java.net.URI; import java.net.URL; import java.util.ArrayList; import java.util.Collections; @@ -69,7 +67,6 @@ import org.apache.catalina.connector.Con import org.apache.catalina.deploy.FilterDef; import org.apache.catalina.util.ResourceSet; import org.apache.catalina.util.ServerInfo; -import org.apache.naming.resources.DirContextURLStreamHandler; import org.apache.naming.resources.Resource; import org.apache.tomcat.util.ExceptionUtils; import org.apache.tomcat.util.buf.CharChunk; @@ -520,9 +517,8 @@ public class ApplicationContext String hostName = context.getParent().getName(); try { resources.lookup(normPath); - return new URL - ("jndi", "", 0, getJNDIUri(hostName, fullPath), - new DirContextURLStreamHandler(resources)); + return new URI("jndi", + getJNDIUri(hostName, fullPath), null).toURL(); } catch (NamingException e) { // Ignore } catch (Exception e) { Modified: tomcat/trunk/java/org/apache/naming/resources/DirContextURLConnection.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/naming/resources/DirContextURLConnection.java?rev=1344890&r1=1344889&r2=1344890&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/naming/resources/DirContextURLConnection.java (original) +++ tomcat/trunk/java/org/apache/naming/resources/DirContextURLConnection.java Thu May 31 20:18:49 2012 @@ -22,8 +22,6 @@ import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.net.URLConnection; -import java.net.URLDecoder; -import java.net.URLEncoder; import java.security.Permission; import java.util.ArrayList; import java.util.Collections; @@ -42,6 +40,7 @@ import javax.naming.directory.Attributes import javax.naming.directory.DirContext; import org.apache.naming.JndiPermission; +import org.apache.tomcat.util.buf.UDecoder; import org.apache.tomcat.util.http.FastHttpDateFormat; /** @@ -55,8 +54,9 @@ import org.apache.tomcat.util.http.FastH * @author <a href="mailto:r...@apache.org">Remy Maucherat</a> * @version $Revision$ */ -public class DirContextURLConnection - extends URLConnection { +public class DirContextURLConnection extends URLConnection { + + private static final UDecoder URL_DECODER = new UDecoder(); // ----------------------------------------------------------- Constructors @@ -123,7 +123,6 @@ public class DirContextURLConnection // ------------------------------------------------------------- Properties - /** * Connect to the DirContext, and retrieve the bound object, as well as * its attributes. If no object is bound with the name specified in the @@ -157,7 +156,7 @@ public class DirContextURLConnection path = path.substring(contextPath.length()); } } - path = URLDecoder.decode(path, "UTF-8"); + path = URL_DECODER.convert(path, false); object = context.lookup(path); attributes = context.getAttributes(path); if (object instanceof Resource) @@ -390,8 +389,7 @@ public class DirContextURLConnection // Reopen resource try { - resource = (Resource) context.lookup( - URLDecoder.decode(getURL().getFile(), "UTF-8")); + resource = (Resource) context.lookup(getURL().getFile()); } catch (NamingException e) { // Ignore } @@ -457,8 +455,7 @@ public class DirContextURLConnection context.list(file.substring(start)); while (enumeration.hasMoreElements()) { NameClassPair ncp = enumeration.nextElement(); - result.addElement( - URLEncoder.encode(ncp.getName(), "UTF-8")); + result.addElement(ncp.getName()); } } catch (NamingException e) { // Unexpected exception Modified: tomcat/trunk/res/checkstyle/org-import-control.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/res/checkstyle/org-import-control.xml?rev=1344890&r1=1344889&r2=1344890&view=diff ============================================================================== --- tomcat/trunk/res/checkstyle/org-import-control.xml (original) +++ tomcat/trunk/res/checkstyle/org-import-control.xml Thu May 31 20:18:49 2012 @@ -106,6 +106,7 @@ <allow pkg="javax.mail"/> <allow pkg="javax.wsdl"/> <allow pkg="org.apache.naming"/> + <allow class="org.apache.tomcat.util.buf.UDecoder"/> <allow class="org.apache.tomcat.util.http.FastHttpDateFormat"/> <allow class="org.apache.tomcat.util.http.RequestUtil"/> <subpackage name="factory.webservices"> Modified: tomcat/trunk/test/org/apache/jasper/compiler/TestCompiler.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/jasper/compiler/TestCompiler.java?rev=1344890&r1=1344889&r2=1344890&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/jasper/compiler/TestCompiler.java (original) +++ tomcat/trunk/test/org/apache/jasper/compiler/TestCompiler.java Thu May 31 20:18:49 2012 @@ -76,8 +76,101 @@ public class TestCompiler extends Tomcat assertTrue(headers.get("Content-Type").get(0).startsWith("text/plain")); } + @Test + public void testBug53257a() throws Exception { + Tomcat tomcat = getTomcatInstance(); + + File appDir = new File("test/webapp-3.0"); + tomcat.addWebapp(null, "/test", appDir.getAbsolutePath()); + tomcat.start(); + + ByteChunk res = getUrl("http://localhost:" + getPort() + + "/test/bug53257/foo%3bbar.jsp"); + + // Check request completed + String result = res.toString(); + assertEcho(result, "OK"); + } + + @Test + public void testBug53257b() throws Exception { + Tomcat tomcat = getTomcatInstance(); + + File appDir = new File("test/webapp-3.0"); + tomcat.addWebapp(null, "/test", appDir.getAbsolutePath()); + tomcat.start(); + + ByteChunk res = getUrl("http://localhost:" + getPort() + + "/test/bug53257/foo&bar.jsp"); + + // Check request completed + String result = res.toString(); + assertEcho(result, "OK"); + } + + @Test + public void testBug53257c() throws Exception { + Tomcat tomcat = getTomcatInstance(); + + File appDir = new File("test/webapp-3.0"); + tomcat.addWebapp(null, "/test", appDir.getAbsolutePath()); + tomcat.start(); + + ByteChunk res = getUrl("http://localhost:" + getPort() + + "/test/bug53257/foo%23bar.jsp"); + + // Check request completed + String result = res.toString(); + assertEcho(result, "OK"); + } + + @Test + public void testBug53257d() throws Exception { + Tomcat tomcat = getTomcatInstance(); + + File appDir = new File("test/webapp-3.0"); + tomcat.addWebapp(null, "/test", appDir.getAbsolutePath()); + tomcat.start(); + + ByteChunk res = getUrl("http://localhost:" + getPort() + + "/test/bug53257/foo%25bar.jsp"); + + // Check request completed + String result = res.toString(); + assertEcho(result, "OK"); + } + + @Test + public void testBug53257e() throws Exception { + Tomcat tomcat = getTomcatInstance(); + + File appDir = new File("test/webapp-3.0"); + tomcat.addWebapp(null, "/test", appDir.getAbsolutePath()); + tomcat.start(); + + ByteChunk res = getUrl("http://localhost:" + getPort() + + "/test/bug53257/foo+bar.jsp"); + + // Check request completed + String result = res.toString(); + assertEcho(result, "OK"); + } + + @Test + public void testBug51584() throws Exception { + Tomcat tomcat = getTomcatInstance(); + + File appDir = new File("test/webapp-3.0-fragments"); + tomcat.addWebapp(null, "/test", appDir.getAbsolutePath()); + tomcat.start(); + + // No further tests required. The bug triggers an infinite loop on + // context start so the test will crash before it reaches this point if + // it fails + } + /** Assertion for text printed by tags:echo */ private static void assertEcho(String result, String expected) { - assertTrue(result.indexOf("<p>" + expected + "</p>") > 0); + assertTrue(result, result.indexOf("<p>" + expected + "</p>") > 0); } } Modified: tomcat/trunk/test/webapp-3.0/bug53257/index.jsp URL: http://svn.apache.org/viewvc/tomcat/trunk/test/webapp-3.0/bug53257/index.jsp?rev=1344890&r1=1344889&r2=1344890&view=diff ============================================================================== --- tomcat/trunk/test/webapp-3.0/bug53257/index.jsp (original) +++ tomcat/trunk/test/webapp-3.0/bug53257/index.jsp Thu May 31 20:18:49 2012 @@ -15,8 +15,8 @@ limitations under the License. --%><%@page contentType="text/plain; charset=UTF-8" %><%@page import="java.net.URL,java.net.URLConnection"%><% - String[] testFiles = - new String[] {"foo;bar", "foo&bar", "foo#bar", "foo+bar"}; + String[] testFiles = new String[] {"foo;bar.txt", "foo&bar.txt", + "foo#bar.txt", "foo%bar.txt", "foo+bar.txt"}; for (String testFile : testFiles) { URL url = application.getResource("/bug53257/" + testFile); if (url == null) { --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org