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/trunk@1754140 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/java/org/apache/catalina/connector/CoyoteAdapter.java b/java/org/apache/catalina/connector/CoyoteAdapter.java
index 2f358b4..27cd958 100644
--- a/java/org/apache/catalina/connector/CoyoteAdapter.java
+++ b/java/org/apache/catalina/connector/CoyoteAdapter.java
@@ -764,7 +764,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 2d9d1fe..ace90a4 100644
--- a/java/org/apache/catalina/core/ApplicationContext.java
+++ b/java/org/apache/catalina/core/ApplicationContext.java
@@ -463,7 +463,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 00087c5..eccc2f0 100644
--- a/java/org/apache/catalina/core/StandardContext.java
+++ b/java/org/apache/catalina/core/StandardContext.java
@@ -2030,7 +2030,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 d2f36d2..14386fa 100644
--- a/java/org/apache/catalina/manager/HTMLManagerServlet.java
+++ b/java/org/apache/catalina/manager/HTMLManagerServlet.java
@@ -430,10 +430,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();
@@ -445,7 +445,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 02007c3..aebdb23 100644
--- a/java/org/apache/catalina/servlets/DefaultServlet.java
+++ b/java/org/apache/catalina/servlets/DefaultServlet.java
@@ -692,7 +692,7 @@
* @return the rewritten path
*/
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 d9a67fb..c3cbdc9 100644
--- a/java/org/apache/catalina/ssi/SSIMediator.java
+++ b/java/org/apache/catalina/ssi/SSIMediator.java
@@ -296,7 +296,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..aebbe7e 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 566a938..66ae786 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);