From: Stefan Fritsch Date: Wed, 13 Jul 2011 20:38:33 +0000 (+0000) Subject: Don't try to compress requests with a zero sized body. X-Git-Tag: 2.3.14^2~56 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8c0a03454c8c5a7cf90c3961ca9991dc4ac8af88;p=thirdparty%2Fapache%2Fhttpd.git Don't try to compress requests with a zero sized body. PR: 51350 git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1146418 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index 7f92cacf048..a4c6c335b26 100644 --- a/CHANGES +++ b/CHANGES @@ -2,6 +2,9 @@ Changes with Apache 2.3.14 + *) mod_deflate: Don't try to compress requests with a zero sized body. + PR 51350. [Stefan Fritsch] + *) core: Fix startup on IP6-only systems. PR 50592. [Joe Orton, ] diff --git a/modules/filters/mod_deflate.c b/modules/filters/mod_deflate.c index a11c6022be1..2f186433b75 100644 --- a/modules/filters/mod_deflate.c +++ b/modules/filters/mod_deflate.c @@ -426,6 +426,8 @@ static apr_status_t deflate_out_filter(ap_filter_t *f, request_rec *r = f->r; deflate_ctx *ctx = f->ctx; int zRC; + apr_size_t len; + const char *data; deflate_filter_config *c; /* Do nothing if asked to filter nothing. */ @@ -446,6 +448,28 @@ static apr_status_t deflate_out_filter(ap_filter_t *f, char *token; const char *encoding; + /* Delay initialization until we have seen some data */ + e = APR_BRIGADE_FIRST(bb); + while (1) { + apr_status_t rc; + if (e == APR_BRIGADE_SENTINEL(bb)) + return ap_pass_brigade(f->next, bb); + if (APR_BUCKET_IS_EOS(e)) { + ap_remove_output_filter(f); + return ap_pass_brigade(f->next, bb); + } + if (APR_BUCKET_IS_METADATA(e)) + continue; + + rc = apr_bucket_read(e, &data, &len, APR_BLOCK_READ); + if (rc != APR_SUCCESS) + return rc; + if (len > 0) + break; + + e = APR_BUCKET_NEXT(e); + } + ctx = f->ctx = apr_pcalloc(r->pool, sizeof(*ctx)); /* @@ -645,9 +669,7 @@ static apr_status_t deflate_out_filter(ap_filter_t *f, while (!APR_BRIGADE_EMPTY(bb)) { - const char *data; apr_bucket *b; - apr_size_t len; /* * Optimization: If we are a HEAD request and bytes_sent is not zero