You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by lu...@apache.org on 2003/09/04 00:10:33 UTC
cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/coyote/tomcat5 CoyoteResponse.java
luehe 2003/09/03 15:10:33
Modified: catalina/src/share/org/apache/coyote/tomcat5
CoyoteResponse.java
Log:
Fixed Bugtraq 4916164 ("Tomcat's default charset for Preferred locale
overrides page directive")
The HTTP spec mandates that in:
media-type = type "/" subtype *( ";" parameter )
parameter = attribute "=" value
there be no (linear) white space between the type and subtype, nor
between an attribute and its value, but it does not make any statement
about the number of spaces surrounding the semicolon.
The HTTP spec itself has this example:
Content-Type: text/html; charset=ISO-8859-4
Revision Changes Path
1.8 +27 -6 jakarta-tomcat-catalina/catalina/src/share/org/apache/coyote/tomcat5/CoyoteResponse.java
Index: CoyoteResponse.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/coyote/tomcat5/CoyoteResponse.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- CoyoteResponse.java 2 Sep 2003 21:21:59 -0000 1.7
+++ CoyoteResponse.java 3 Sep 2003 22:10:33 -0000 1.8
@@ -713,9 +713,30 @@
return;
coyoteResponse.setContentType(type);
- if ((type != null) && (type.indexOf(";charset=") != -1)) {
- isCharacterEncodingSet = true;
+
+ // Check to see if content type contains charset
+ if (type != null) {
+ int index = type.indexOf(";");
+ if (index != -1) {
+ int len = type.length();
+ index++;
+ while (index < len && Character.isSpace(type.charAt(index))) {
+ index++;
+ }
+ if (index+7 < len
+ && type.charAt(index) == 'c'
+ && type.charAt(index+1) == 'h'
+ && type.charAt(index+2) == 'a'
+ && type.charAt(index+3) == 'r'
+ && type.charAt(index+4) == 's'
+ && type.charAt(index+5) == 'e'
+ && type.charAt(index+6) == 't'
+ && type.charAt(index+7) == '=') {
+ isCharacterEncodingSet = true;
+ }
+ }
}
+
isContentTypeSet = true;
}