Extract path info from requests without decoding
The fix for Guice issue #745[1] causes getPathInfo() within the GuiceFilter to return decoded values, eliminating the difference between "foo/bar" and "foo%2Fbar". This is in spec with the servlet standard, whose javadoc for getPathInfo[2] states that the return value be "decoded by the web container". Work around this by extracting the path part directly from the request URI, which is unmodified by the container. This is copying the Guice behavior prior to the bugfix. We do this with a static method rather than using our own HttpServletRequestWrapper as we don't want to produce a request wrapper that is not in spec. [1] https://github.com/google/guice/issues/745 [2] http://docs.oracle.com/javaee/7/api/javax/servlet/http/HttpServletRequest.html#getPathInfo() Change-Id: I48fb32710d45f573fb167c6344ad76541672858c
This commit is contained in:
@@ -74,6 +74,7 @@ import com.google.gerrit.extensions.restapi.RestResource;
|
||||
import com.google.gerrit.extensions.restapi.RestView;
|
||||
import com.google.gerrit.extensions.restapi.TopLevelResource;
|
||||
import com.google.gerrit.extensions.restapi.UnprocessableEntityException;
|
||||
import com.google.gerrit.httpd.RequestUtil;
|
||||
import com.google.gerrit.httpd.WebSession;
|
||||
import com.google.gerrit.server.AccessPath;
|
||||
import com.google.gerrit.server.AnonymousUser;
|
||||
@@ -871,7 +872,7 @@ public class RestApiServlet extends HttpServlet {
|
||||
}
|
||||
|
||||
private static List<IdString> splitPath(HttpServletRequest req) {
|
||||
String path = req.getPathInfo();
|
||||
String path = RequestUtil.getEncodedPathInfo(req);
|
||||
if (Strings.isNullOrEmpty(path)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user