You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2018/09/03 19:08:53 UTC

svn commit: r1839983 - in /tomcat/trunk: java/org/apache/catalina/ssi/ResponseIncludeWrapper.java java/org/apache/catalina/ssi/SSIFilter.java java/org/apache/catalina/ssi/SSIServletExternalResolver.java webapps/docs/changelog.xml

Author: markt
Date: Mon Sep  3 19:08:53 2018
New Revision: 1839983

URL: http://svn.apache.org/viewvc?rev=1839983&view=rev
Log:
Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=62669

When using the SSIFilter and a resource does not specify a content type,
do not force the content type to application/x-octet-stream

Modified:
    tomcat/trunk/java/org/apache/catalina/ssi/ResponseIncludeWrapper.java
    tomcat/trunk/java/org/apache/catalina/ssi/SSIFilter.java
    tomcat/trunk/java/org/apache/catalina/ssi/SSIServletExternalResolver.java
    tomcat/trunk/webapps/docs/changelog.xml

Modified: tomcat/trunk/java/org/apache/catalina/ssi/ResponseIncludeWrapper.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ssi/ResponseIncludeWrapper.java?rev=1839983&r1=1839982&r2=1839983&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/ssi/ResponseIncludeWrapper.java (original)
+++ tomcat/trunk/java/org/apache/catalina/ssi/ResponseIncludeWrapper.java Mon Sep  3 19:08:53 2018
@@ -22,9 +22,7 @@ import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
 import java.util.Locale;
 
-import javax.servlet.ServletContext;
 import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponseWrapper;
 
@@ -41,11 +39,9 @@ public class ResponseIncludeWrapper exte
     /**
      * The names of some headers we want to capture.
      */
-    private static final String CONTENT_TYPE = "content-type";
     private static final String LAST_MODIFIED = "last-modified";
 
     protected long lastModified = -1;
-    private String contentType = null;
 
     /**
      * Our ServletOutputStream
@@ -54,24 +50,16 @@ public class ResponseIncludeWrapper exte
     protected ServletOutputStream servletOutputStream;
     protected PrintWriter printWriter;
 
-    private final ServletContext context;
-    private final HttpServletRequest request;
-
     /**
      * Initialize our wrapper with the current HttpServletResponse and
      * ServletOutputStream.
      *
-     * @param context The servlet context
-     * @param request The HttpServletResponse to use
      * @param response The response to use
      * @param captureServletOutputStream The ServletOutputStream to use
      */
-    public ResponseIncludeWrapper(ServletContext context,
-            HttpServletRequest request, HttpServletResponse response,
+    public ResponseIncludeWrapper(HttpServletResponse response,
             ServletOutputStream captureServletOutputStream) {
         super(response);
-        this.context = context;
-        this.request = request;
         this.captureServletOutputStream = captureServletOutputStream;
     }
 
@@ -152,41 +140,6 @@ public class ResponseIncludeWrapper exte
         return lastModified;
     }
 
-    /**
-     * Returns the value of the <code>content-type</code> header field.
-     *
-     * @return the content type of the resource referenced by this
-     *   <code>ResponseIncludeWrapper</code>, or <code>null</code> if not known.
-     */
-    @Override
-    public String getContentType() {
-        if (contentType == null) {
-            String url = request.getRequestURI();
-            String mime = context.getMimeType(url);
-            if (mime != null) {
-                setContentType(mime);
-            } else {
-                // return a safe value
-                setContentType("application/x-octet-stream");
-            }
-        }
-        return contentType;
-    }
-
-    /**
-     * Sets the value of the <code>content-type</code> header field.
-     *
-     * @param mime a mime type
-     */
-    @Override
-    public void setContentType(String mime) {
-        contentType = mime;
-        if (contentType != null) {
-            getResponse().setContentType(contentType);
-        }
-    }
-
-
     @Override
     public void addDateHeader(String name, long value) {
         super.addDateHeader(name, value);
@@ -205,8 +158,6 @@ public class ResponseIncludeWrapper exte
             if (lastModified != -1) {
                 this.lastModified = lastModified;
             }
-        } else if (lname.equals(CONTENT_TYPE)) {
-            contentType = value;
         }
     }
 
@@ -228,8 +179,6 @@ public class ResponseIncludeWrapper exte
             if (lastModified != -1) {
                 this.lastModified = lastModified;
             }
-        } else if (lname.equals(CONTENT_TYPE)) {
-            contentType = value;
         }
     }
 }

Modified: tomcat/trunk/java/org/apache/catalina/ssi/SSIFilter.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ssi/SSIFilter.java?rev=1839983&r1=1839982&r2=1839983&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/ssi/SSIFilter.java (original)
+++ tomcat/trunk/java/org/apache/catalina/ssi/SSIFilter.java Mon Sep  3 19:08:53 2018
@@ -92,8 +92,7 @@ public class SSIFilter extends GenericFi
 
         // setup to capture output
         ByteArrayServletOutputStream basos = new ByteArrayServletOutputStream();
-        ResponseIncludeWrapper responseIncludeWrapper =
-                new ResponseIncludeWrapper(getServletContext(),req, res, basos);
+        ResponseIncludeWrapper responseIncludeWrapper = new ResponseIncludeWrapper(res, basos);
 
         // process remainder of filter chain
         chain.doFilter(req, responseIncludeWrapper);
@@ -106,7 +105,7 @@ public class SSIFilter extends GenericFi
         String contentType = responseIncludeWrapper.getContentType();
 
         // is this an allowed type for SSI processing?
-        if (contentTypeRegEx.matcher(contentType).matches()) {
+        if (contentType != null && contentTypeRegEx.matcher(contentType).matches()) {
             String encoding = res.getCharacterEncoding();
 
             // set up SSI processing

Modified: tomcat/trunk/java/org/apache/catalina/ssi/SSIServletExternalResolver.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ssi/SSIServletExternalResolver.java?rev=1839983&r1=1839982&r2=1839983&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/ssi/SSIServletExternalResolver.java (original)
+++ tomcat/trunk/java/org/apache/catalina/ssi/SSIServletExternalResolver.java Mon Sep  3 19:08:53 2018
@@ -522,10 +522,8 @@ public class SSIServletExternalResolver
                 throw new IOException(
                         "Couldn't get request dispatcher for path: " + path);
             }
-            ByteArrayServletOutputStream basos =
-                new ByteArrayServletOutputStream();
-            ResponseIncludeWrapper responseIncludeWrapper =
-                new ResponseIncludeWrapper(context, req, res, basos);
+            ByteArrayServletOutputStream basos = new ByteArrayServletOutputStream();
+            ResponseIncludeWrapper responseIncludeWrapper = new ResponseIncludeWrapper(res, basos);
             rd.include(req, responseIncludeWrapper);
             //We can't assume the included servlet flushed its output
             responseIncludeWrapper.flushOutputStreamOrWriter();

Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1839983&r1=1839982&r2=1839983&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Mon Sep  3 19:08:53 2018
@@ -58,6 +58,11 @@
         (markt)
       </fix>
       <fix>
+        <bug>62669</bug>: When using the SSIFilter and a resource does not
+        specify a content type, do not force the content type to
+        <code>application/x-octet-stream</code>. (markt)
+      </fix>
+      <fix>
         <bug>62670</bug>: Adjust the memory leak protection for the
         <code>DriverManager</code> so that JDBC drivers located in
         <code>$CATALINA_HOME/lib</code> and <code>$CATALINA_BASE/lib</code> are



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org