luehe       2004/07/27 17:43:17

  Modified:    coyote/src/java/org/apache/coyote Response.java
  Log:
  Fixed Bugtraq 6152759 ("Default charset not included in Content-Type
  response header if no char encoding was specified").
  
  According to the Servlet 2.4 spec, calling:
  
    ServletResponse.setContentType("text/html");
  
  must yield these results:
  
    ServletResponse.getContentType() -> "text/html"
  
    Content-Type response header -> "text/html;charset=ISO-8859-1"
  
  Notice the absence of a charset in the result of getContentType(), but
  its presence (set to the default ISO-8859-1) in the Content-Type
  response header.
  
  Tomcat is currently not including the default charset in the
  Content-Type response header if no char encoding was specified.
  
  Revision  Changes    Path
  1.33      +28 -0     
jakarta-tomcat-connectors/coyote/src/java/org/apache/coyote/Response.java
  
  Index: Response.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-connectors/coyote/src/java/org/apache/coyote/Response.java,v
  retrieving revision 1.32
  retrieving revision 1.33
  diff -u -r1.32 -r1.33
  --- Response.java     24 Feb 2004 08:54:29 -0000      1.32
  +++ Response.java     28 Jul 2004 00:43:17 -0000      1.33
  @@ -21,6 +21,7 @@
   
   import org.apache.tomcat.util.buf.ByteChunk;
   import org.apache.tomcat.util.http.MimeHeaders;
  +import org.apache.tomcat.util.http.ContentType;
   
   /**
    * Response object.
  @@ -524,6 +525,33 @@
           return ret;
       }
       
  +
  +    /**
  +     * Returns the value of the Content-Type response header, based on the
  +     * current return value of getContentType().
  +     *
  +     * Notice that while the charset parameter must be omitted from the
  +     * return value of ServletResponse.getContentType() if no character
  +     * encoding has been specified, the spec requires that a charset (default:
  +     * ISO-8859-1) always be included in the Content-Type response header
  +     *
  +     * @return Value of Content-Type response header
  +     */
  +    public String getContentTypeResponseHeader() {
  +
  +        String header = getContentType();
  +        if (header != null) {
  +            if (!ContentType.hasCharset(header)) {
  +                // Must communicate response encoding to client
  +                header = header + ";charset="
  +                    + Constants.DEFAULT_CHARACTER_ENCODING;
  +            }
  +        }
  +
  +        return header;
  +    }
  +
  +
       public void setContentLength(int contentLength) {
           this.contentLength = contentLength;
       }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to