From: Jim Jagielski Date: Tue, 7 Aug 2007 12:10:52 +0000 (+0000) Subject: Merge r563154, r563229, r563230 from trunk: X-Git-Tag: 2.2.5~23 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4ab4da1a26e90d180a2e5b082813989ef2f93f16;p=thirdparty%2Fapache%2Fhttpd.git Merge r563154, r563229, r563230 from trunk: Don't try to compress/decompress where there's a Content-Range. According to RFC2616, the range would have to apply *after* applying content-encoding, so anything that's been set before running the deflate filter is going to be broken. * We already unset Content-Length in the inflate_out_filter. So move the comment and unsetting of Content-MD5 in the right place. * Also unset Content-MD5 in the deflate_out_filter Reviewed by: jim git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.2.x@563466 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/modules/filters/mod_deflate.c b/modules/filters/mod_deflate.c index 365a8378fec..98ecd3b72c3 100644 --- a/modules/filters/mod_deflate.c +++ b/modules/filters/mod_deflate.c @@ -387,6 +387,12 @@ static apr_status_t deflate_out_filter(ap_filter_t *f, return ap_pass_brigade(f->next, bb); } + /* We can't operate on Content-Ranges */ + if (apr_table_get(r->headers_out, "Content-Range") != NULL) { + ap_remove_output_filter(f); + return ap_pass_brigade(f->next, bb); + } + /* Some browsers might have problems with content types * other than text/html, so set gzip-only-text/html * (with browsermatch) for them @@ -536,6 +542,7 @@ static apr_status_t deflate_out_filter(ap_filter_t *f, apr_table_mergen(r->headers_out, "Content-Encoding", "gzip"); } apr_table_unset(r->headers_out, "Content-Length"); + apr_table_unset(r->headers_out, "Content-MD5"); /* initialize deflate output buffer */ ctx->stream.next_out = ctx->buffer; @@ -715,6 +722,12 @@ static apr_status_t deflate_in_filter(ap_filter_t *f, return ap_get_brigade(f->next, bb, mode, block, readbytes); } + /* We can't operate on Content-Ranges */ + if (apr_table_get(r->headers_in, "Content-Range") != NULL) { + ap_remove_input_filter(f); + return ap_get_brigade(f->next, bb, mode, block, readbytes); + } + /* Check whether request body is gzipped. * * If it is, we're transforming the contents, invalidating @@ -739,7 +752,6 @@ static apr_status_t deflate_in_filter(ap_filter_t *f, apr_table_unset(r->headers_in, "Content-Length"); apr_table_unset(r->headers_in, "Content-MD5"); - apr_table_unset(r->headers_in, "Content-Range"); len = 10; rv = apr_brigade_flatten(ctx->bb, deflate_hdr, &len); @@ -968,6 +980,12 @@ static apr_status_t inflate_out_filter(ap_filter_t *f, return ap_pass_brigade(f->next, bb); } + /* We can't operate on Content-Ranges */ + if (apr_table_get(r->headers_out, "Content-Range") != NULL) { + ap_remove_output_filter(f); + return ap_pass_brigade(f->next, bb); + } + /* * Let's see what our current Content-Encoding is. * Only inflate if gzipped. @@ -983,11 +1001,6 @@ static apr_status_t inflate_out_filter(ap_filter_t *f, return ap_pass_brigade(f->next, bb); } - /* these are unlikely to be set anyway, but ... */ - apr_table_unset(r->headers_out, "Content-Length"); - apr_table_unset(r->headers_out, "Content-MD5"); - apr_table_unset(r->headers_out, "Content-Range"); - f->ctx = ctx = apr_pcalloc(f->r->pool, sizeof(*ctx)); ctx->bb = apr_brigade_create(r->pool, f->c->bucket_alloc); ctx->buffer = apr_palloc(r->pool, c->bufferSize); @@ -1020,7 +1033,9 @@ static apr_status_t inflate_out_filter(ap_filter_t *f, apr_pool_cleanup_register(r->pool, ctx, deflate_ctx_cleanup, apr_pool_cleanup_null); + /* these are unlikely to be set anyway, but ... */ apr_table_unset(r->headers_out, "Content-Length"); + apr_table_unset(r->headers_out, "Content-MD5"); /* initialize inflate output buffer */ ctx->stream.next_out = ctx->buffer;