This reverts commit 19f869996f
.
Leaving path info encoded confuses applications like Gitiles.
Trying to fix this inside of JGit was maybe the wrong solution.
Change-Id: I8df9ab6233ff513e427701c8a1a66022c19784eb
tags/v3.7.0.201502031740-rc1
@@ -225,48 +225,6 @@ public final class ServletUtils { | |||
} | |||
} | |||
/** | |||
* Get the path info component of the request. The result is similar to | |||
* {@link HttpServletRequest#getPathInfo()}, but URL-encoded characters are | |||
* not decoded. | |||
* | |||
* @param req | |||
* the incoming request. | |||
* @return the same value as {@link HttpServletRequest#getPathInfo()}, but | |||
* without decoding URL-encoded characters. | |||
* @since 3.6 | |||
*/ | |||
public static String getEncodedPathInfo(HttpServletRequest req) { | |||
return getEncodedPathInfo(req.getContextPath(), req.getServletPath(), | |||
req.getRequestURI()); | |||
} | |||
/** | |||
* Get the path info component of the request. The result is similar to | |||
* {@link HttpServletRequest#getPathInfo()}, but URL-encoded characters are | |||
* not decoded. | |||
* | |||
* @param contextPath | |||
* the context path from the incoming request. | |||
* @param servletPath | |||
* the servlet path from the incoming request. | |||
* @param requestUri | |||
* the request URI from the incoming request. | |||
* @return the same value as {@link HttpServletRequest#getPathInfo()}, but | |||
* without decoding URL-encoded characters. | |||
*/ | |||
static String getEncodedPathInfo(String contextPath, String servletPath, | |||
String requestUri) { | |||
String pathInfo = requestUri.substring(contextPath.length()) | |||
.replaceAll("/{2,}", "/"); | |||
if (!pathInfo.startsWith(servletPath)) | |||
return null; | |||
pathInfo = pathInfo.substring(servletPath.length()); | |||
if (pathInfo.isEmpty() && !servletPath.isEmpty()) | |||
return null; | |||
return pathInfo; | |||
} | |||
private static byte[] sendInit(byte[] content, | |||
final HttpServletRequest req, final HttpServletResponse rsp) | |||
throws IOException { |
@@ -56,8 +56,6 @@ import javax.servlet.http.HttpServlet; | |||
import javax.servlet.http.HttpServletRequest; | |||
import javax.servlet.http.HttpServletResponse; | |||
import org.eclipse.jgit.http.server.ServletUtils; | |||
/** | |||
* Selects requests by matching the URI against a regular expression. | |||
* <p> | |||
@@ -111,14 +109,14 @@ class RegexPipeline extends UrlPipeline { | |||
} | |||
boolean match(final HttpServletRequest req) { | |||
final String pathInfo = ServletUtils.getEncodedPathInfo(req); | |||
final String pathInfo = req.getPathInfo(); | |||
return pathInfo != null && pattern.matcher(pathInfo).matches(); | |||
} | |||
@Override | |||
void service(HttpServletRequest req, HttpServletResponse rsp) | |||
throws ServletException, IOException { | |||
final String reqInfo = ServletUtils.getEncodedPathInfo(req); | |||
final String reqInfo = req.getPathInfo(); | |||
if (reqInfo == null) { | |||
rsp.sendError(SC_NOT_FOUND); | |||
return; |
@@ -51,8 +51,6 @@ import javax.servlet.http.HttpServlet; | |||
import javax.servlet.http.HttpServletRequest; | |||
import javax.servlet.http.HttpServletResponse; | |||
import org.eclipse.jgit.http.server.ServletUtils; | |||
/** | |||
* Selects requests by matching the suffix of the URI. | |||
* <p> | |||
@@ -90,14 +88,14 @@ class SuffixPipeline extends UrlPipeline { | |||
} | |||
boolean match(final HttpServletRequest req) { | |||
final String pathInfo = ServletUtils.getEncodedPathInfo(req); | |||
final String pathInfo = req.getPathInfo(); | |||
return pathInfo != null && pathInfo.endsWith(suffix); | |||
} | |||
@Override | |||
void service(HttpServletRequest req, HttpServletResponse rsp) | |||
throws ServletException, IOException { | |||
String curInfo = ServletUtils.getEncodedPathInfo(req); | |||
String curInfo = req.getPathInfo(); | |||
String newPath = req.getServletPath() + curInfo; | |||
String newInfo = curInfo.substring(0, curInfo.length() - suffixLen); | |||
super.service(new WrappedRequest(req, newPath, newInfo), rsp); |
@@ -48,50 +48,7 @@ import static org.junit.Assert.assertTrue; | |||
import org.junit.Test; | |||
import static org.junit.Assert.assertEquals; | |||
public class ServletUtilsTest { | |||
@Test | |||
public void emptyContextPath() { | |||
assertEquals("/foo/bar", | |||
ServletUtils.getEncodedPathInfo("", "/s", "/s/foo/bar")); | |||
assertEquals("/foo%2Fbar", | |||
ServletUtils.getEncodedPathInfo("", "/s", "/s/foo%2Fbar")); | |||
} | |||
public void slashContextPath() { | |||
assertEquals("/foo/bar", | |||
ServletUtils.getEncodedPathInfo("/", "/s", "/s/foo/bar")); | |||
assertEquals("/foo%2Fbar", | |||
ServletUtils.getEncodedPathInfo("/", "/s", "/s/foo%2Fbar")); | |||
} | |||
@Test | |||
public void emptyServletPath() { | |||
assertEquals("/foo/bar", | |||
ServletUtils.getEncodedPathInfo("/c", "", "/c/foo/bar")); | |||
assertEquals("/foo%2Fbar", | |||
ServletUtils.getEncodedPathInfo("/c", "", "/c/foo%2Fbar")); | |||
} | |||
@Test | |||
public void trailingSlashes() { | |||
assertEquals("/foo/bar/", | |||
ServletUtils.getEncodedPathInfo("/c", "/s", "/c/s/foo/bar/")); | |||
assertEquals("/foo/bar/", | |||
ServletUtils.getEncodedPathInfo("/c", "/s", "/c/s/foo/bar///")); | |||
assertEquals("/foo%2Fbar/", | |||
ServletUtils.getEncodedPathInfo("/c", "/s", "/c/s/foo%2Fbar/")); | |||
assertEquals("/foo%2Fbar/", ServletUtils.getEncodedPathInfo("/c", "/s", | |||
"/c/s/foo%2Fbar///")); | |||
} | |||
@Test | |||
public void servletPathMatchesRequestPath() { | |||
assertEquals((String) null, | |||
ServletUtils.getEncodedPathInfo("/c", "/s", "/c/s")); | |||
} | |||
@Test | |||
public void testAcceptGzip() { | |||
assertFalse(ServletUtils.acceptsGzipEncoding((String) null)); |
@@ -168,7 +168,7 @@ public class RegexPipelineTest extends HttpTestCase { | |||
s.serveRegex("^(/c)(/d)$") | |||
.through(new RegexGroupFilter(1)) | |||
.with(new Servlet("test2")); | |||
s.serveRegex("^(/e)/f.*(/g)$") | |||
s.serveRegex("^(/e)/f(/g)$") | |||
.through(new RegexGroupFilter(2)) | |||
.with(new Servlet("test3")); | |||
ctx.addServlet(new ServletHolder(s), "/*"); | |||
@@ -197,12 +197,12 @@ public class RegexPipelineTest extends HttpTestCase { | |||
assertEquals("/c", r.readLine()); | |||
assertEquals(null, r.readLine()); | |||
c = ((HttpURLConnection) uri.resolve("/e/f/+/g").toURL() | |||
c = ((HttpURLConnection) uri.resolve("/e/f/g").toURL() | |||
.openConnection()); | |||
assertEquals(200, c.getResponseCode()); | |||
r = new BufferedReader(new InputStreamReader(c.getInputStream())); | |||
assertEquals("test3", r.readLine()); | |||
assertEquals("/e/f/+", r.readLine()); | |||
assertEquals("/e/f", r.readLine()); | |||
assertEquals("/g", r.readLine()); | |||
assertEquals(null, r.readLine()); | |||
} |