]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
mod_disk_cache: Do not store aborted content.
authorJustin Erenkrantz <jerenkrantz@apache.org>
Tue, 28 Sep 2004 16:26:48 +0000 (16:26 +0000)
committerJustin Erenkrantz <jerenkrantz@apache.org>
Tue, 28 Sep 2004 16:26:48 +0000 (16:26 +0000)
PR: 21492
Submitted by: R�diger Pl�m <r.pluem t-online.de>
Reviewed by: Justin Erenkrantz

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

CHANGES
modules/experimental/mod_disk_cache.c

diff --git a/CHANGES b/CHANGES
index c67582a89ab944c2cba609ed841c682b9ec4680d..bd4923e479a733e9911351fdd65eac7f5343d7f3 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -2,6 +2,9 @@ Changes with Apache 2.1.0-dev
 
   [Remove entries to the current 2.0 section below, when backported]
 
+  *) mod_disk_cache: Do not store aborted content.  PR 21492.
+     [Rüdiger Plüm <r.pluem t-online.de>]
+
   *) mod_disk_cache: Correctly store cached content type.  PR 30278.
      [Rüdiger Plüm <r.pluem t-online.de>]
 
index 0c9ccd3540bd4e76afb802b51f7e818e995969cd..125bec9c40688f1469152fd93b059f8a63131ad8 100644 (file)
@@ -701,6 +701,22 @@ static apr_status_t store_body(cache_handle_t *h, request_rec *r,
      */
     if (APR_BUCKET_IS_EOS(APR_BRIGADE_LAST(bb))) {
         if (h->cache_obj->info.len <= 0) {
+          /* If the target value of the content length is unknown
+           * (h->cache_obj->info.len <= 0), check if connection has been
+           * aborted by client to avoid caching incomplete request bodies.
+           *
+           * This can happen with large responses from slow backends like
+           * Tomcat via mod_jk.
+           */
+          if (r->connection->aborted) {
+            ap_log_error(APLOG_MARK, APLOG_INFO, 0, r->server,
+                         "disk_cache: Discarding body for URL %s "
+                         "because connection has been aborted.",
+                         h->cache_obj->key);
+            /* Remove the intermediate cache file and return non-APR_SUCCESS */
+            file_cache_errorcleanup(dobj, r);
+            return APR_EGENERAL;
+          }
           /* XXX Fixme: file_size isn't constrained by size_t. */
           h->cache_obj->info.len = dobj->file_size;
         }