From: Roy T. Fielding Date: Fri, 3 Apr 2009 23:16:03 +0000 (+0000) Subject: Revert changes in 2.2.11 that caused an invalid X-Git-Tag: 2.2.12~186 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=592d71ba459bc39d69bc1fd5c3d0743d9e3a9821;p=thirdparty%2Fapache%2Fhttpd.git Revert changes in 2.2.11 that caused an invalid etag to be emitted for on-the-fly gzip content-encoding. PR 39727 will require larger fixes and this fix was far more harmful than the original code. PR: 45023, 39727 git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.2.x@761835 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index e59b7684179..a3304cb99f3 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,11 @@ -*- coding: utf-8 -*- Changes with Apache 2.2.12 + *) mod_deflate: revert changes in 2.2.11 that caused an invalid + etag to be emitted for on-the-fly gzip content-encoding. + PR 39727 will require larger fixes and this fix was far more + harmful than the original code. PR 45023. [Roy T. Fielding] + *) mod_disk_cache: The module now turns off sendfile support if 'EnableSendfile off' is defined globally. PR 41218. [Lars Eilebrecht, Issac Goldstand] diff --git a/modules/filters/mod_deflate.c b/modules/filters/mod_deflate.c index ebeab75759b..07ca194f97d 100644 --- a/modules/filters/mod_deflate.c +++ b/modules/filters/mod_deflate.c @@ -372,41 +372,7 @@ static apr_status_t deflate_ctx_cleanup(void *data) ctx->libz_end_func(&ctx->stream); return APR_SUCCESS; } -/* ETag must be unique among the possible representations, so a change - * to content-encoding requires a corresponding change to the ETag. - * This routine appends -transform (e.g., -gzip) to the entity-tag - * value inside the double-quotes if an ETag has already been set - * and its value already contains double-quotes. PR 39727 - */ -static void deflate_check_etag(request_rec *r, const char *transform) -{ - const char *etag = apr_table_get(r->headers_out, "ETag"); - apr_size_t etaglen; - - if ((etag && ((etaglen = strlen(etag)) > 2))) { - if (etag[etaglen - 1] == '"') { - apr_size_t transformlen = strlen(transform); - char *newtag = apr_palloc(r->pool, etaglen + transformlen + 2); - char *d = newtag; - char *e = d + etaglen - 1; - const char *s = etag; - - for (; d < e; ++d, ++s) { - *d = *s; /* copy etag to newtag up to last quote */ - } - *d++ = '-'; /* append dash to newtag */ - s = transform; - e = d + transformlen; - for (; d < e; ++d, ++s) { - *d = *s; /* copy transform to newtag */ - } - *d++ = '"'; /* append quote to newtag */ - *d = '\0'; /* null terminate newtag */ - apr_table_setn(r->headers_out, "ETag", newtag); - } - } -} static apr_status_t deflate_out_filter(ap_filter_t *f, apr_bucket_brigade *bb) { @@ -604,7 +570,6 @@ static apr_status_t deflate_out_filter(ap_filter_t *f, } apr_table_unset(r->headers_out, "Content-Length"); apr_table_unset(r->headers_out, "Content-MD5"); - deflate_check_etag(r, "gzip"); /* initialize deflate output buffer */ ctx->stream.next_out = ctx->buffer; @@ -1097,7 +1062,6 @@ static apr_status_t inflate_out_filter(ap_filter_t *f, /* these are unlikely to be set anyway, but ... */ apr_table_unset(r->headers_out, "Content-Length"); apr_table_unset(r->headers_out, "Content-MD5"); - deflate_check_etag(r, "gunzip"); /* initialize inflate output buffer */ ctx->stream.next_out = ctx->buffer;