From: Ruediger Pluem Date: Thu, 17 May 2007 10:55:15 +0000 (+0000) Subject: Merge r425787 from trunk: X-Git-Tag: 2.2.5~229 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=05b665bd8b2ba6a60115a152825a3e21710bd8aa;p=thirdparty%2Fapache%2Fhttpd.git Merge r425787 from trunk: * Remove all filters that are before the cache_out filter. This ensures that we kick off the filter stack with our cache_out filter being the first in the chain. This make sense because we want to restore things in the same manner as we saved them. There may be filters before our cache_out filter, because 1. We call ap_set_content_type during cache_select. This causes Content-Type specific filters to be added. 2. We call the insert_filter hook. This causes filters e.g. like the ones set with SetOutputFilter to be added. PR: 40090 Submitted by: rpluem Reviewed by: rpluem, wrowe, jerenkrantz git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.2.x@538868 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index 1742754a8f9..bd0bf756c40 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,10 @@ -*- coding: utf-8 -*- Changes with Apache 2.2.5 + *) mod_cache: While serving a cached entity ensure that filters that have + been applied to this cached entity before saving it to the cache are not + applied again. PR 40090. [Ruediger Pluem] + *) mod_cache: Correctly cache objects whose URL query string has been modified by mod_rewrite. PR 40805. [Ruediger Pluem] diff --git a/STATUS b/STATUS index d9faf0386ad..f77d1a71b39 100644 --- a/STATUS +++ b/STATUS @@ -105,16 +105,6 @@ PATCHES ACCEPTED TO BACKPORT FROM TRUNK: http://svn.apache.org/viewvc?view=rev&rev=520733 +1: wrowe, rpluem, niq - * mod_cache: While serving a cached entity ensure that filters that have - been applied to this cached entity before saving it to the cache are not - applied again. - PR: 40090 - Trunk version of patch: - http://svn.apache.org/viewvc?rev=425787&view=rev - 2.2.x version of patch: - Trunk version works - +1: rpluem, wrowe, jerenkrantz - PATCHES PROPOSED TO BACKPORT FROM TRUNK: * ApacheMonitor: Fix Windows Vista detection. diff --git a/modules/cache/mod_cache.c b/modules/cache/mod_cache.c index acdad8e8b61..ffee10675dd 100644 --- a/modules/cache/mod_cache.c +++ b/modules/cache/mod_cache.c @@ -56,6 +56,8 @@ static int cache_url_handler(request_rec *r, int lookup) cache_request_rec *cache; cache_server_conf *conf; apr_bucket_brigade *out; + ap_filter_t *next; + ap_filter_rec_t *cache_out_handle; /* Delay initialization until we know we are handling a GET */ if (r->method_number != M_GET) { @@ -213,12 +215,29 @@ static int cache_url_handler(request_rec *r, int lookup) * or not. */ if (r->main) { - ap_add_output_filter_handle(cache_out_subreq_filter_handle, NULL, - r, r->connection); + cache_out_handle = cache_out_subreq_filter_handle; } else { - ap_add_output_filter_handle(cache_out_filter_handle, NULL, - r, r->connection); + cache_out_handle = cache_out_filter_handle; + } + ap_add_output_filter_handle(cache_out_handle, NULL, r, r->connection); + + /* + * Remove all filters that are before the cache_out filter. This ensures + * that we kick off the filter stack with our cache_out filter being the + * first in the chain. This make sense because we want to restore things + * in the same manner as we saved them. + * There may be filters before our cache_out filter, because + * + * 1. We call ap_set_content_type during cache_select. This causes + * Content-Type specific filters to be added. + * 2. We call the insert_filter hook. This causes filters e.g. like + * the ones set with SetOutputFilter to be added. + */ + next = r->output_filters; + while (next && (next->frec != cache_out_handle)) { + ap_remove_output_filter(next); + next = next->next; } /* kick off the filter stack */