From: Ruediger Pluem Date: Mon, 1 Dec 2008 20:27:27 +0000 (+0000) Subject: * Avoid sending no answer at all if a custom error page causes an X-Git-Tag: 2.3.0~60 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cd505682e9cba5aead0cdfd56089b2273f0bcebe;p=thirdparty%2Fapache%2Fhttpd.git * Avoid sending no answer at all if a custom error page causes an AP_FILTER_ERROR. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@722213 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/modules/http/http_request.c b/modules/http/http_request.c index 28d237a6e8a..8ca18d5b4c0 100644 --- a/modules/http/http_request.c +++ b/modules/http/http_request.c @@ -79,7 +79,31 @@ AP_DECLARE(void) ap_die(int type, request_rec *r) request_rec *r_1st_err = r; if (type == AP_FILTER_ERROR) { - return; + ap_filter_t *next; + + /* + * Check if we still have the ap_http_header_filter in place. If + * this is the case we should not ignore AP_FILTER_ERROR here because + * it means that we have not sent any response at all and never + * will. This is bad. Sent an internal server error instead. + */ + next = r->output_filters; + while (next && (next->frec != ap_http_header_filter_handle)) { + next = next->next; + } + + /* + * If next != NULL then we left the while above because of + * next->frec == ap_http_header_filter + */ + if (next) { + ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, + "Custom error page caused AP_FILTER_ERROR"); + type = HTTP_INTERNAL_SERVER_ERROR; + } + else { + return; + } } if (type == DONE) {