Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=50413
authormarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Fri, 10 Dec 2010 10:11:38 +0000 (10:11 +0000)
committermarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Fri, 10 Dec 2010 10:11:38 +0000 (10:11 +0000)
Ensure 304s are not returned when using static files as error pages

git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1044266 13f79535-47bb-0310-9956-ffa450edef68

java/org/apache/catalina/servlets/DefaultServlet.java
webapps/docs/changelog.xml

index bc0d7ed..cddefcd 100644 (file)
@@ -792,6 +792,9 @@ public class DefaultServlet
             }
         }
 
+        boolean isError =
+            response.getStatus() >= HttpServletResponse.SC_BAD_REQUEST;
+
         // Check if the conditions specified in the optional If headers are
         // satisfied.
         if (cacheEntry.context == null) {
@@ -799,8 +802,8 @@ public class DefaultServlet
             // Checking If headers
             boolean included =
                 (request.getAttribute(Globals.INCLUDE_CONTEXT_PATH_ATTR) != null);
-            if (!included
-                && !checkIfHeaders(request, response, cacheEntry.attributes)) {
+            if (!included && !isError &&
+                    !checkIfHeaders(request, response, cacheEntry.attributes)) {
                 return;
             }
 
@@ -828,21 +831,23 @@ public class DefaultServlet
             contentType = "text/html;charset=UTF-8";
 
         } else {
-            if (useAcceptRanges) {
-                // Accept ranges header
-                response.setHeader("Accept-Ranges", "bytes");
+            if (!isError) {
+                if (useAcceptRanges) {
+                    // Accept ranges header
+                    response.setHeader("Accept-Ranges", "bytes");
+                }
+    
+                // Parse range specifier
+                ranges = parseRange(request, response, cacheEntry.attributes);
+    
+                // ETag header
+                response.setHeader("ETag", cacheEntry.attributes.getETag());
+    
+                // Last-Modified header
+                response.setHeader("Last-Modified",
+                        cacheEntry.attributes.getLastModifiedHttp());
             }
 
-            // Parse range specifier
-            ranges = parseRange(request, response, cacheEntry.attributes);
-
-            // ETag header
-            response.setHeader("ETag", cacheEntry.attributes.getETag());
-
-            // Last-Modified header
-            response.setHeader("Last-Modified",
-                    cacheEntry.attributes.getLastModifiedHttp());
-
             // Get content length
             contentLength = cacheEntry.attributes.getContentLength();
             // Special case for zero length files, which would cause a
index 4dbeeb1..e483365 100644 (file)
         <code>Store</code> associated with a <code>PersistentManager</code>.
         (markt) 
       </fix>
+      <fix>
+        <bug>50413</bug>: Ensure 304 responses are not returned when using
+        static files as error pages. (markt)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="Coyote">