Commit eeaf6dcd authored by Graham Leggett's avatar Graham Leggett
Browse files

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.
PR:
Obtained from:
Submitted by:	John Sterling
Reviewed by:


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@89253 13f79535-47bb-0310-9956-ffa450edef68
parent 9b662342
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
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.
+23 −0
Original line number Diff line number Diff line
@@ -91,6 +91,28 @@
#include <stdarg.h>
#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);
}