You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2014/05/12 18:56:57 UTC
svn commit: r1594028 - in /tomcat/tc7.0.x/trunk: ./
java/org/apache/catalina/connector/ java/org/apache/tomcat/util/http/mapper/
test/org/apache/catalina/connector/ webapps/docs/
Author: markt
Date: Mon May 12 16:56:56 2014
New Revision: 1594028
URL: http://svn.apache.org/r1594028
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=56501
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=56501
HttpServletRequest.getContextPath() should return the undecoded context path used by the user agent.
Modified:
tomcat/tc7.0.x/trunk/ (props changed)
tomcat/tc7.0.x/trunk/java/org/apache/catalina/connector/Request.java
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/mapper/Mapper.java
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/mapper/MappingData.java
tomcat/tc7.0.x/trunk/test/org/apache/catalina/connector/TestRequest.java
tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
Propchange: tomcat/tc7.0.x/trunk/
------------------------------------------------------------------------------
Merged /tomcat/trunk:r1593621
Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/connector/Request.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/connector/Request.java?rev=1594028&r1=1594027&r2=1594028&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/connector/Request.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/connector/Request.java Mon May 12 16:56:56 2014
@@ -1990,7 +1990,17 @@ public class Request
*/
@Override
public String getContextPath() {
- return mappingData.contextPath.toString();
+ String uri = getRequestURI();
+ int lastSlash = mappingData.contextSlashCount;
+ int pos = 0;
+ while (lastSlash > 0) {
+ pos = uri.indexOf('/', pos + 1);
+ if (pos == -1) {
+ return uri;
+ }
+ lastSlash--;
+ }
+ return uri.substring(0, pos);
}
Modified: tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/mapper/Mapper.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/mapper/Mapper.java?rev=1594028&r1=1594027&r2=1594028&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/mapper/Mapper.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/mapper/Mapper.java Mon May 12 16:56:56 2014
@@ -237,6 +237,7 @@ public final class Mapper {
new ContextVersion[contextVersions.length + 1];
ContextVersion newContextVersion = new ContextVersion();
newContextVersion.path = path;
+ newContextVersion.slashCount = slashCount;
newContextVersion.name = version;
newContextVersion.object = context;
newContextVersion.welcomeResources = welcomeResources;
@@ -814,6 +815,7 @@ public final class Mapper {
}
}
mappingData.context = contextVersion.object;
+ mappingData.contextSlashCount = contextVersion.slashCount;
}
// Wrapper mapping
@@ -1503,6 +1505,7 @@ public final class Mapper {
protected static final class ContextVersion extends MapElement {
public String path = null;
+ public int slashCount;
public String[] welcomeResources = new String[0];
public javax.naming.Context resources = null;
public Wrapper defaultWrapper = null;
Modified: tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/mapper/MappingData.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/mapper/MappingData.java?rev=1594028&r1=1594027&r2=1594028&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/mapper/MappingData.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/mapper/MappingData.java Mon May 12 16:56:56 2014
@@ -28,6 +28,7 @@ public class MappingData {
public Object host = null;
public Object context = null;
+ public int contextSlashCount = 0;
public Object[] contexts = null;
public Object wrapper = null;
public boolean jspWildCard = false;
@@ -42,6 +43,7 @@ public class MappingData {
public void recycle() {
host = null;
context = null;
+ contextSlashCount = 0;
contexts = null;
wrapper = null;
jspWildCard = false;
Modified: tomcat/tc7.0.x/trunk/test/org/apache/catalina/connector/TestRequest.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/catalina/connector/TestRequest.java?rev=1594028&r1=1594027&r2=1594028&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/test/org/apache/catalina/connector/TestRequest.java (original)
+++ tomcat/tc7.0.x/trunk/test/org/apache/catalina/connector/TestRequest.java Mon May 12 16:56:56 2014
@@ -697,4 +697,114 @@ public class TestRequest extends TomcatB
fail("OK status was expected: " + status);
}
}
+
+ @Test
+ public void testBug56501a() throws Exception {
+ doBug56501("/path", "/path", "/path");
+ }
+
+ @Test
+ public void testBug56501b() throws Exception {
+ doBug56501("/path", "/path/", "/path");
+ }
+
+ @Test
+ public void testBug56501c() throws Exception {
+ doBug56501("/path", "/path/xxx", "/path");
+ }
+
+ @Test
+ public void testBug56501d() throws Exception {
+ doBug56501("", "", "");
+ }
+
+ @Test
+ public void testBug56501e() throws Exception {
+ doBug56501("", "/", "");
+ }
+
+ @Test
+ public void testBug56501f() throws Exception {
+ doBug56501("", "/xxx", "");
+ }
+
+ @Test
+ public void testBug56501g() throws Exception {
+ doBug56501("/path/abc", "/path/abc", "/path/abc");
+ }
+
+ @Test
+ public void testBug56501h() throws Exception {
+ doBug56501("/path/abc", "/path/abc/", "/path/abc");
+ }
+
+ @Test
+ public void testBug56501i() throws Exception {
+ doBug56501("/path/abc", "/path/abc/xxx", "/path/abc");
+ }
+
+ @Test
+ public void testBug56501j() throws Exception {
+ doBug56501("/pa_th/abc", "/pa%5Fth/abc", "/pa%5Fth/abc");
+ }
+
+ @Test
+ public void testBug56501k() throws Exception {
+ doBug56501("/pa_th/abc", "/pa%5Fth/abc/", "/pa%5Fth/abc");
+ }
+
+ @Test
+ public void testBug56501l() throws Exception {
+ doBug56501("/pa_th/abc", "/pa%5Fth/abc/xxx", "/pa%5Fth/abc");
+ }
+
+ @Test
+ public void testBug56501m() throws Exception {
+ doBug56501("/pa_th/abc", "/pa_th/abc", "/pa_th/abc");
+ }
+
+ @Test
+ public void testBug56501n() throws Exception {
+ doBug56501("/pa_th/abc", "/pa_th/abc/", "/pa_th/abc");
+ }
+
+ @Test
+ public void testBug56501o() throws Exception {
+ doBug56501("/pa_th/abc", "/pa_th/abc/xxx", "/pa_th/abc");
+ }
+
+ private void doBug56501(String deployPath, String requestPath, String expected)
+ throws Exception {
+
+ // Setup Tomcat instance
+ Tomcat tomcat = getTomcatInstance();
+
+ // Must have a real docBase - just use temp
+ Context ctx = tomcat.addContext(deployPath,
+ System.getProperty("java.io.tmpdir"));
+
+ Tomcat.addServlet(ctx, "servlet", new Bug56501Servelet());
+ ctx.addServletMapping("/*", "servlet");
+
+ tomcat.start();
+
+ ByteChunk res = getUrl("http://localhost:" + getPort() + requestPath);
+ String resultPath = res.toString();
+ if (resultPath == null) {
+ resultPath = "";
+ }
+ assertEquals(expected, resultPath);
+ }
+
+ private class Bug56501Servelet extends HttpServlet {
+
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+ throws ServletException, IOException {
+ resp.setContentType("text/plain");
+ resp.getWriter().print(req.getContextPath());
+ }
+ }
}
Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1594028&r1=1594027&r2=1594028&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Mon May 12 16:56:56 2014
@@ -178,6 +178,10 @@
authentication of users when using the
<code>JAASMemoryLoginModule</code>. (markt)
</fix>
+ <fix>
+ <bug>56501</bug>: <code>HttpServletRequest.getContextPath()</code>
+ should return the undecoded context path used by the user agent. (markt)
+ </fix>
</changelog>
</subsection>
<subsection name="Coyote">
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org