diff options
author | Greg Ames <gregames@apache.org> | 2002-04-15 22:42:45 +0200 |
---|---|---|
committer | Greg Ames <gregames@apache.org> | 2002-04-15 22:42:45 +0200 |
commit | d4a51d0f74b1e66d153e618524d82019a04c0075 (patch) | |
tree | f0195ea5576b3465b0c8673bcf831d65eff83df6 /modules/http | |
parent | Fixing the link to the bug reporting page. (diff) | |
download | apache2-d4a51d0f74b1e66d153e618524d82019a04c0075.tar.xz apache2-d4a51d0f74b1e66d153e618524d82019a04c0075.zip |
ap_send_error_response: reset r->output filters to the protocol filters.
The equivalent logic was deleted when request filters were renamed to
RESOURCE filters. This fixes the seg faults that sometimes happen on
daedalus after a bogus 416 HTTP response is generated.
In this case, includes_filter had found an <!--#include virtual > tag, and
sent a brigade representing the data before it down the filter chain. The
byterange filter generated the bogus 416. ap_send_error_response essentially
starts over with a new response, but it didn't do anything to clean up the
filter chain. So the same instance of the includes_filter got driven from the
top with the canned error text and and EOS bucket, which confused the heck
out of it. It inserted a sentinel from the original brigade into the
error page brigade, causing problems further down the filter chain.
Submitted by: Greg Ames, Jeff Trawick
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@94662 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'modules/http')
-rw-r--r-- | modules/http/http_protocol.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/modules/http/http_protocol.c b/modules/http/http_protocol.c index 8e5029884b..119dbfaa8a 100644 --- a/modules/http/http_protocol.c +++ b/modules/http/http_protocol.c @@ -2025,6 +2025,12 @@ AP_DECLARE(void) ap_send_error_response(request_rec *r, int recursive_error) */ r->eos_sent = 0; + /* and we need to get rid of any RESOURCE filters that might be lurking + * around, thinking they are in the middle of the original request + */ + + r->output_filters = r->proto_output_filters; + /* * It's possible that the Location field might be in r->err_headers_out * instead of r->headers_out; use the latter if possible, else the |