diff -Nrup httpd-2.0.51.orig/modules/experimental/mod_disk_cache.c httpd-2.0.51/modules/experimental/mod_disk_cache.c --- httpd-2.0.51.orig/modules/experimental/mod_disk_cache.c 2004-08-26 18:59:44.000000000 +0200 +++ httpd-2.0.51/modules/experimental/mod_disk_cache.c 2004-09-22 16:32:44.000000000 +0200 @@ -659,6 +659,21 @@ static apr_status_t store_body(cache_han /* Was this the final bucket? If yes, close the body file and make sanity checks */ if (APR_BUCKET_IS_EOS(APR_BRIGADE_LAST(b))) { 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 bodys. + * 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 */ + return file_cache_errorcleanup(dobj, r); + } /* XXX Fixme: file_size isn't constrained by size_t. */ h->cache_obj->info.len = dobj->file_size; }