diff --git a/CHANGES b/CHANGES index 349eac2bb4..eaf78496b5 100644 --- a/CHANGES +++ b/CHANGES @@ -1,4 +1,9 @@ Changes with Apache 2.0.19-dev + + *) Add a check to ap_die() to make sure the filter stack is sane and + contains the correct basic filters when an error occurs. This fixes + a problem where headers are not being sent on error. [John Sterling] + *) New Header directive 'echo' option. "Header echo regex" will cause any headers received on the request that match regex to be echoed to (included in) the response headers. diff --git a/modules/http/http_request.c b/modules/http/http_request.c index 735c1e6d72..cfb9eeeb25 100644 --- a/modules/http/http_request.c +++ b/modules/http/http_request.c @@ -91,6 +91,28 @@ #include #endif +static void add_required_filters(request_rec *r) +{ + ap_filter_t *f = r->output_filters; + int has_core = 0, has_content = 0, has_http_header = 0; + while (f) { + if(!strcasecmp(f->frec->name, "CORE")) + has_core = 1; + else if(!strcasecmp(f->frec->name, "CONTENT_LENGTH")) + has_content = 1; + else if(!strcasecmp(f->frec->name, "HTTP_HEADER")) + has_http_header = 1; + f = f->next; + } + if(!has_core) + ap_add_output_filter("CORE", NULL, r, r->connection); + if(!has_content) + ap_add_output_filter("CONTENT_LENGTH", NULL, r, r->connection); + if(!has_http_header) + ap_add_output_filter("HTTP_HEADER", NULL, r, r->connection); + +} + /***************************************************************** * * Mainline request processing... @@ -201,6 +223,7 @@ AP_DECLARE(void) ap_die(int type, request_rec *r) custom_response); } } + add_required_filters(r); ap_send_error_response(r, recursive_error); }