You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by ni...@apache.org on 2007/08/06 16:37:43 UTC

svn commit: r563154 - /httpd/httpd/trunk/modules/filters/mod_deflate.c

Author: niq
Date: Mon Aug  6 07:37:42 2007
New Revision: 563154

URL: http://svn.apache.org/viewvc?view=rev&rev=563154
Log:
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.


Modified:
    httpd/httpd/trunk/modules/filters/mod_deflate.c

Modified: httpd/httpd/trunk/modules/filters/mod_deflate.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/filters/mod_deflate.c?view=diff&rev=563154&r1=563153&r2=563154
==============================================================================
--- httpd/httpd/trunk/modules/filters/mod_deflate.c (original)
+++ httpd/httpd/trunk/modules/filters/mod_deflate.c Mon Aug  6 07:37:42 2007
@@ -387,6 +387,12 @@
             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
@@ -715,6 +721,12 @@
             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 +751,6 @@
 
         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 +979,12 @@
             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.
@@ -986,7 +1003,6 @@
 	/* 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);