Skip to content

Commit f1b150b

Browse files
committed
raw: URL encode the links to raw view of files
So far links to raw view were not encoded. The browser did some encoding of spaces on its own, which the servlet would unescape, since it uses the `HttpServletRequest.getPathInfo` method. That decodes the path before returning it. A problem arises when a bracket is in the file (or folder) name. The brackets are the characters that are not allowed in the path, according to the `URI.parse` method. (Which is a bit harsh, because brackets actually are only reserved for the host part since IPv6.) That means that the decoding fails when a bracket character is encountered. This went unnoticed since the failed decoding will return the path as it got it. But once there is a space in the file name, which the browser helpfully encoded for us, the failed decoding will now leave the encoded space in there. And that will result in a path that does not exist, e.g. `file%20[a]`. To be on the safe side, we simply encode the path in the links that we generate, so that it complies with the rules that are used in `getPathInfo`. This fixes #1375.
1 parent 583e15e commit f1b150b

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

src/main/java/com/gitblit/servlet/RawServlet.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import javax.servlet.http.HttpServletResponse;
3737

3838
import org.apache.tika.Tika;
39+
import org.apache.wicket.protocol.http.WicketURLEncoder;
3940
import org.eclipse.jgit.lib.FileMode;
4041
import org.eclipse.jgit.lib.MutableObjectId;
4142
import org.eclipse.jgit.lib.ObjectLoader;
@@ -121,7 +122,8 @@ public static String asLink(String baseURL, String repository, String branch, St
121122
path = path.substring(1);
122123
}
123124
String encodedPath = path == null ? "" : path.replace('/', fsc);
124-
return baseURL + Constants.RAW_PATH + repository + "/" + (branch == null ? "" : (branch + "/" + encodedPath));
125+
String fullPath = repository + "/" + (branch == null ? "" : (branch + "/" + encodedPath));
126+
return baseURL + Constants.RAW_PATH + WicketURLEncoder.FULL_PATH_INSTANCE.encode(fullPath);
125127
}
126128

127129

0 commit comments

Comments
 (0)