From: Jeff Trawick Date: Mon, 10 Apr 2006 18:01:29 +0000 (+0000) Subject: Default handler: Don't return output filter apr_status_t values. X-Git-Tag: 2.0.56~16 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=58d434afb3b8ae116a49600f32710029a1d61865;p=thirdparty%2Fapache%2Fhttpd.git Default handler: Don't return output filter apr_status_t values. PR: 31759 Reviewed by: rpleum, gregames git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.0.x@393005 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index 065130f3cc4..11c6ff67782 100644 --- a/CHANGES +++ b/CHANGES @@ -14,6 +14,9 @@ Changes with Apache 2.0.56 ap_escape_html so we escape quotes. Reported by JPCERT. [Mark Cox] + *) Default handler: Don't return output filter apr_status_t values. + PR 31759. [Jeff Trawick, Ruediger Pluem, Joe Orton] + *) mod_speling: Stop crashing with certain non-file requests. [Jeff Trawick] diff --git a/STATUS b/STATUS index 796b9519a9a..b0bfee434a2 100644 --- a/STATUS +++ b/STATUS @@ -116,14 +116,6 @@ PATCHES ACCEPTED TO BACKPORT FROM TRUNK: http://svn.apache.org/viewcvs?rev=390573&view=rev +1: wrowe, trawick, rpluem - *) Default handler: Don't return output filter apr_status_t values. PR 31759. - Trunk version of patch: - http://svn.apache.org/viewcvs?rev=390922&view=rev - http://svn.apache.org/viewcvs?rev=391025&view=rev - 2.0.x version of patch: - Trunk version works - +1: rpluem, trawick, gregames - *) Make sure we write a reasonable status line (e.g., if byterange filter modifies status and custom status line is left unmodified). diff --git a/server/core.c b/server/core.c index be59bcdfc5d..9e2c2af3004 100644 --- a/server/core.c +++ b/server/core.c @@ -3645,7 +3645,19 @@ static int default_handler(request_rec *r) e = apr_bucket_eos_create(c->bucket_alloc); APR_BRIGADE_INSERT_TAIL(bb, e); - return ap_pass_brigade(r->output_filters, bb); + status = ap_pass_brigade(r->output_filters, bb); + if (status == APR_SUCCESS + || r->status != HTTP_OK + || c->aborted) { + return OK; /* r->status will be respected */ + } + else { + /* no way to know what type of error occurred */ + ap_log_rerror(APLOG_MARK, APLOG_DEBUG, status, r, + "default_handler: ap_pass_brigade returned %i", + status); + return HTTP_INTERNAL_SERVER_ERROR; + } } else { /* unusual method (not GET or POST) */ if (r->method_number == M_INVALID) {