Add an encoding parameter to URLEncoder.encode() and be explicit about the encoding wherever Tomcat uses this method.
git-svn-id: https://svn.apache.org/repos/asf/tomcat/tc8.0.x/trunk@1754145 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/java/org/apache/catalina/connector/CoyoteAdapter.java b/java/org/apache/catalina/connector/CoyoteAdapter.java
index 843de22..8367ab2 100644
--- a/java/org/apache/catalina/connector/CoyoteAdapter.java
+++ b/java/org/apache/catalina/connector/CoyoteAdapter.java
@@ -992,7 +992,7 @@
// Possible redirect
MessageBytes redirectPathMB = request.getMappingData().redirectPath;
if (!redirectPathMB.isNull()) {
- String redirectPath = URLEncoder.DEFAULT.encode(redirectPathMB.toString());
+ String redirectPath = URLEncoder.DEFAULT.encode(redirectPathMB.toString(), "UTF-8");
String query = request.getQueryString();
if (request.isRequestedSessionIdFromURL()) {
// This is not optimal, but as this is not very common, it
diff --git a/java/org/apache/catalina/core/ApplicationContext.java b/java/org/apache/catalina/core/ApplicationContext.java
index af312e8..857b38f 100644
--- a/java/org/apache/catalina/core/ApplicationContext.java
+++ b/java/org/apache/catalina/core/ApplicationContext.java
@@ -519,7 +519,7 @@
mappingData.recycle();
- String encodedUri = URLEncoder.DEFAULT.encode(uriCC.toString());
+ String encodedUri = URLEncoder.DEFAULT.encode(uriCC.toString(), "UTF-8");
// Construct a RequestDispatcher to process this request
return new ApplicationDispatcher(wrapper, encodedUri, wrapperPath, pathInfo,
diff --git a/java/org/apache/catalina/core/StandardContext.java b/java/org/apache/catalina/core/StandardContext.java
index 1885e8e..5ec8dfd 100644
--- a/java/org/apache/catalina/core/StandardContext.java
+++ b/java/org/apache/catalina/core/StandardContext.java
@@ -2052,7 +2052,7 @@
log.warn(sm.getString(
"standardContext.pathInvalid", path, this.path));
}
- encodedPath = URLEncoder.DEFAULT.encode(this.path);
+ encodedPath = URLEncoder.DEFAULT.encode(this.path, "UTF-8");
if (getName() == null) {
setName(this.path);
}
diff --git a/java/org/apache/catalina/manager/HTMLManagerServlet.java b/java/org/apache/catalina/manager/HTMLManagerServlet.java
index ed3f206..ad03cc5 100644
--- a/java/org/apache/catalina/manager/HTMLManagerServlet.java
+++ b/java/org/apache/catalina/manager/HTMLManagerServlet.java
@@ -427,10 +427,10 @@
StringBuilder tmp = new StringBuilder();
tmp.append("path=");
- tmp.append(URL_ENCODER.encode(displayPath));
+ tmp.append(URL_ENCODER.encode(displayPath, "UTF-8"));
if (ctxt.getWebappVersion().length() > 0) {
tmp.append("&version=");
- tmp.append(URL_ENCODER.encode(ctxt.getWebappVersion()));
+ tmp.append(URL_ENCODER.encode(ctxt.getWebappVersion(), "UTF-8"));
}
String pathVersion = tmp.toString();
@@ -442,7 +442,7 @@
}
args = new Object[7];
- args[0] = "<a href=\"" + URL_ENCODER.encode(contextPath + "/")
+ args[0] = "<a href=\"" + URL_ENCODER.encode(contextPath + "/", "UTF-8")
+ "\">" + RequestUtil.filter(displayPath) + "</a>";
if ("".equals(ctxt.getWebappVersion())) {
args[1] = noVersion;
diff --git a/java/org/apache/catalina/servlets/DefaultServlet.java b/java/org/apache/catalina/servlets/DefaultServlet.java
index 689f4ef..ea36964 100644
--- a/java/org/apache/catalina/servlets/DefaultServlet.java
+++ b/java/org/apache/catalina/servlets/DefaultServlet.java
@@ -665,7 +665,7 @@
* @param path Path which has to be rewritten
*/
protected String rewriteUrl(String path) {
- return URLEncoder.DEFAULT.encode( path );
+ return URLEncoder.DEFAULT.encode(path, "UTF-8");
}
diff --git a/java/org/apache/catalina/ssi/SSIMediator.java b/java/org/apache/catalina/ssi/SSIMediator.java
index cdf7d24..444c535 100644
--- a/java/org/apache/catalina/ssi/SSIMediator.java
+++ b/java/org/apache/catalina/ssi/SSIMediator.java
@@ -294,7 +294,7 @@
protected String encode(String value, String encoding) {
String retVal = null;
if (encoding.equalsIgnoreCase("url")) {
- retVal = urlEncoder.encode(value);
+ retVal = urlEncoder.encode(value, "UTF-8");
} else if (encoding.equalsIgnoreCase("none")) {
retVal = value;
} else if (encoding.equalsIgnoreCase("entity")) {
diff --git a/java/org/apache/catalina/util/URLEncoder.java b/java/org/apache/catalina/util/URLEncoder.java
index 7ebd701..f90f5fd 100644
--- a/java/org/apache/catalina/util/URLEncoder.java
+++ b/java/org/apache/catalina/util/URLEncoder.java
@@ -67,13 +67,37 @@
safeCharacters.set( c );
}
- public String encode( String path ) {
+
+ /**
+ * URL encodes the provided path using UTF-8.
+ *
+ * @param path The path to encode
+ *
+ * @return The encoded path
+ *
+ * @deprecated Use {@link #encode(String, String)}
+ */
+ @Deprecated
+ public String encode(String path) {
+ return encode(path, "UTF-8");
+ }
+
+
+ /**
+ * URL encodes the provided path using the given encoding.
+ *
+ * @param path The path to encode
+ * @param encoding The encoding to use to convert the path to bytes
+ *
+ * @return The encoded path
+ */
+ public String encode(String path, String encoding) {
int maxBytesPerChar = 10;
StringBuilder rewrittenPath = new StringBuilder(path.length());
ByteArrayOutputStream buf = new ByteArrayOutputStream(maxBytesPerChar);
OutputStreamWriter writer = null;
try {
- writer = new OutputStreamWriter(buf, "UTF8");
+ writer = new OutputStreamWriter(buf, encoding);
} catch (Exception e) {
e.printStackTrace();
writer = new OutputStreamWriter(buf);
diff --git a/java/org/apache/catalina/valves/rewrite/RewriteValve.java b/java/org/apache/catalina/valves/rewrite/RewriteValve.java
index fe999ae..fc4b7c2 100644
--- a/java/org/apache/catalina/valves/rewrite/RewriteValve.java
+++ b/java/org/apache/catalina/valves/rewrite/RewriteValve.java
@@ -433,7 +433,7 @@
if (context) {
chunk.append(contextPath);
}
- chunk.append(URLEncoder.DEFAULT.encode(urlString));
+ chunk.append(URLEncoder.DEFAULT.encode(urlString, "UTF-8"));
request.getCoyoteRequest().requestURI().toChars();
// Decoded and normalized URI
request.getCoyoteRequest().decodedURI().setString(null);