diff --git a/CHANGES b/CHANGES index 464b4a6b83..5bf3e08241 100644 --- a/CHANGES +++ b/CHANGES @@ -32,9 +32,6 @@ Changes with Apache 2.1.0-dev *) Fix a compile failure with recent OpenSSL and picky compilers (e.g., OpenSSL 0.9.7a and xlc_r on AIX). [Jeff Trawick] - *) Do not bypass output filters when redirecting subrequests internally. - PR 17629. [André Malo] - *) OpenSSL headers should be included as "openssl/ssl.h", and not rely on the INCLUDE path to be defined properly. PR 11310. [Geoff Thrope ] diff --git a/STATUS b/STATUS index 4438b9ae23..84fd137c63 100644 --- a/STATUS +++ b/STATUS @@ -1,5 +1,5 @@ APACHE 2.1 STATUS: -*-text-*- -Last modified at [$Date: 2003/05/21 16:21:19 $] +Last modified at [$Date: 2003/05/29 15:07:11 $] Release [NOTE that only Alpha/Beta releases occur in 2.1 development]: @@ -104,6 +104,18 @@ CURRENT VOTES: RELEASE NON-SHOWSTOPPERS BUT WOULD BE REAL NICE TO WRAP THESE UP: + * Filter stacks and subrequests, redirects and fast redirects. + There's at least one PR that suffers from the current unclean behaviour + (which lets the server send garbage): PR 17629 + nd says: Every subrequest should get its own filter stack with the + subreq_core filter as bottom-most. That filter does two things: + - swallow EOS buckets + - redirect the data stream to the upper request's (rr->main) + filter chain directly after the subrequest's starting + point. + Once we have a clean solution, we can try to optimize + it, so that the server won't be slow down too much. + * RFC 2616 violations. Closed PRs: 15857. Open PRs: 15852, 15859, 15861, 15864, 15865, 15866, 15868, 15869, diff --git a/modules/http/http_request.c b/modules/http/http_request.c index ea2fca452c..8f8472ce9c 100644 --- a/modules/http/http_request.c +++ b/modules/http/http_request.c @@ -400,27 +400,17 @@ static request_rec *internal_internal_redirect(const char *new_uri, new->proto_output_filters = r->proto_output_filters; new->proto_input_filters = r->proto_input_filters; - if (new->main) { - new->output_filters = r->output_filters; - new->input_filters = r->input_filters; + new->output_filters = new->proto_output_filters; + new->input_filters = new->proto_input_filters; + if (new->main) { /* Add back the subrequest filter, which we lost when * we set output_filters to include only the protocol * output filters from the original request. - * - * XXX: This shouldn't be neccessary any longer, because the filter - * is still in place -- isn't it? */ ap_add_output_filter_handle(ap_subreq_core_filter_handle, NULL, new, new->connection); } - else { - /* In subrequests we _must_ point to the complete upper request's - * filter chain, so skip the filters _only_ within the main request. - */ - new->output_filters = new->proto_output_filters; - new->input_filters = new->proto_input_filters; - } update_r_in_filters(new->input_filters, r, new); update_r_in_filters(new->output_filters, r, new); @@ -471,19 +461,10 @@ AP_DECLARE(void) ap_internal_fast_redirect(request_rec *rr, request_rec *r) r->subprocess_env = apr_table_overlay(r->pool, rr->subprocess_env, r->subprocess_env); - /* copy the filters _only_ within the main request. In subrequests - * we _must_ point to the upper requests' filter chain, so do not - * touch 'em! - */ - if (!r->main) { - r->output_filters = rr->output_filters; - r->input_filters = rr->input_filters; - } + r->output_filters = rr->output_filters; + r->input_filters = rr->input_filters; if (r->main) { - /* XXX: This shouldn't be neccessary any longer, because the filter - * is still in place -- isn't it? - */ ap_add_output_filter_handle(ap_subreq_core_filter_handle, NULL, r, r->connection); }