Author: markt
Date: Thu Jan 4 17:23:41 2018
New Revision: 1820138
URL: http://svn.apache.org/viewvc?rev=1820138&view=rev
Log:
Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=61916
Extend the AddDefaultCharsetFilter to add a character set when the content type
is set via setHeader() or addHeader() as well as when it is set via
setContentType().
Modified:
tomcat/trunk/java/org/apache/catalina/filters/AddDefaultCharsetFilter.java
tomcat/trunk/test/org/apache/catalina/filters/TestAddCharSetFilter.java
tomcat/trunk/webapps/docs/changelog.xml
Modified:
tomcat/trunk/java/org/apache/catalina/filters/AddDefaultCharsetFilter.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/filters/AddDefaultCharsetFilter.java?rev=1820138&r1=1820137&r2=1820138&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/filters/AddDefaultCharsetFilter.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/filters/AddDefaultCharsetFilter.java
Thu Jan 4 17:23:41 2018
@@ -121,6 +121,24 @@ public class AddDefaultCharsetFilter ext
}
@Override
+ public void setHeader(String name, String value) {
+ if (name.trim().equalsIgnoreCase("content-type")) {
+ setContentType(value);
+ } else {
+ super.setHeader(name, value);
+ }
+ }
+
+ @Override
+ public void addHeader(String name, String value) {
+ if (name.trim().equalsIgnoreCase("content-type")) {
+ setContentType(value);
+ } else {
+ super.setHeader(name, value);
+ }
+ }
+
+ @Override
public void setCharacterEncoding(String charset) {
super.setCharacterEncoding(charset);
encoding = charset;
Modified:
tomcat/trunk/test/org/apache/catalina/filters/TestAddCharSetFilter.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/filters/TestAddCharSetFilter.java?rev=1820138&r1=1820137&r2=1820138&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/filters/TestAddCharSetFilter.java
(original)
+++ tomcat/trunk/test/org/apache/catalina/filters/TestAddCharSetFilter.java Thu
Jan 4 17:23:41 2018
@@ -48,12 +48,12 @@ public class TestAddCharSetFilter extend
@Test
public void testNoneSpecifiedMode2() throws Exception {
- doTest(null, "ISO-8859-2", 2);
+ doTest(null, "ISO-8859-2", 2, true);
}
@Test
public void testNoneSpecifiedMode3() throws Exception {
- doTest(null, "ISO-8859-3", 3);
+ doTest(null, "ISO-8859-3", 3, true);
}
@Test
@@ -83,10 +83,13 @@ public class TestAddCharSetFilter extend
private void doTest(String encoding, String expected) throws Exception {
- doTest(encoding, expected, 1);
+ doTest(encoding, expected, 1, true);
+ tearDown();
+ setUp();
+ doTest(encoding, expected, 1, false);
}
- private void doTest(String encoding, String expected, int mode)
+ private void doTest(String encoding, String expected, int mode, boolean
useSetContentType)
throws Exception {
// Setup Tomcat instance
Tomcat tomcat = getTomcatInstance();
@@ -95,7 +98,7 @@ public class TestAddCharSetFilter extend
Context ctx = tomcat.addContext("", null);
// Add the Servlet
- CharsetServlet servlet = new CharsetServlet(mode);
+ CharsetServlet servlet = new CharsetServlet(mode, useSetContentType);
Tomcat.addServlet(ctx, "servlet", servlet);
ctx.addServletMappingDecoded("/", "servlet");
@@ -128,30 +131,53 @@ public class TestAddCharSetFilter extend
private static final String OUTPUT = "OK";
private final int mode;
+ private final boolean useSetContentType;
- public CharsetServlet(int mode) {
+ public CharsetServlet(int mode, boolean useSetContentType) {
this.mode = mode;
+ this.useSetContentType = useSetContentType;
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
+ String value;
switch (mode) {
case 1:
- resp.setContentType("text/plain");
+ value = "text/plain";
+ if (useSetContentType) {
+ resp.setContentType(value);
+ } else {
+ resp.setHeader("Content-Type", value);
+ }
break;
case 2:
- resp.setContentType("text/plain;charset=ISO-8859-2");
+ value = "text/plain;charset=ISO-8859-2";
+ if (useSetContentType) {
+ resp.setContentType(value);
+ } else {
+ resp.setHeader("Content-Type", value);
+ }
break;
case 3:
- resp.setContentType("text/plain");
- resp.setCharacterEncoding("ISO-8859-3");
+ if (useSetContentType) {
+ resp.setContentType("text/plain");
+ resp.setCharacterEncoding("ISO-8859-3");
+ } else {
+ resp.setHeader("Content-Type",
"text/plain;charset=ISO-8859-3");
+ }
break;
default:
- resp.setContentType("text/plain;charset=ISO-8859-4");
+ value = "text/plain;charset=ISO-8859-4";
+ if (useSetContentType) {
+ resp.setContentType(value);
+ } else {
+ resp.setHeader("Content-Type", value);
+ }
break;
}
+
resp.getWriter().print(OUTPUT);
}
}
Modified: tomcat/trunk/webapps/docs/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1820138&r1=1820137&r2=1820138&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Thu Jan 4 17:23:41 2018
@@ -56,6 +56,12 @@
<fix>
Minor HTTP/2 push fixes. (remm)
</fix>
+ <fix>
+ <bug>61916</bug>: Extend the <code>AddDefaultCharsetFilter</code> to
add
+ a character set when the content type is set via
+ <code>setHeader()</code> or <code>addHeader()</code> as well as when it
+ is set via <code>setContentType()</code>. (markt)
+ </fix>
</changelog>
</subsection>
<subsection name="Coyote">
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]