You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Ruediger Pluem <rp...@apache.org> on 2011/09/16 16:45:59 UTC
Re: svn commit: r1170330 - /httpd/httpd/trunk/modules/filters/mod_deflate.c
On 09/13/2011 10:17 PM, sf@apache.org wrote:
> Author: sf
> Date: Tue Sep 13 20:17:18 2011
> New Revision: 1170330
>
> URL: http://svn.apache.org/viewvc?rev=1170330&view=rev
> Log:
> Fix 'Content-Encoding: gzip' missing if the first brigade passed to
> deflate_out_buffer contained zero data bytes but no EOS bucket.
>
> Don't compress if the added headers and checksums are larger than
> the data to compress (and we know the size of the data in advance).
>
> 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?rev=1170330&r1=1170329&r2=1170330&view=diff
> ==============================================================================
> --- httpd/httpd/trunk/modules/filters/mod_deflate.c (original)
> +++ httpd/httpd/trunk/modules/filters/mod_deflate.c Tue Sep 13 20:17:18 2011
> @@ -426,7 +426,7 @@ static apr_status_t deflate_out_filter(a
> request_rec *r = f->r;
> deflate_ctx *ctx = f->ctx;
> int zRC;
> - apr_size_t len;
> + apr_size_t len = 0, blen;
> const char *data;
> deflate_filter_config *c;
>
> @@ -448,28 +448,41 @@ static apr_status_t deflate_out_filter(a
> 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)) {
> - e = APR_BUCKET_NEXT(e);
> - continue;
> - }
> + e = APR_BRIGADE_LAST(bb);
> + if (APR_BUCKET_IS_EOS(e)) {
Does this work if e is the the sentinel (in case of an empty brigade)?
Regards
RĂ¼diger
Re: svn commit: r1170330 - /httpd/httpd/trunk/modules/filters/mod_deflate.c
Posted by Stefan Fritsch <sf...@sfritsch.de>.
On Friday 16 September 2011, Ruediger Pluem wrote:
> On 09/13/2011 10:17 PM, sf@apache.org wrote:
> > Author: sf
> > Date: Tue Sep 13 20:17:18 2011
> > New Revision: 1170330
> >
> > URL: http://svn.apache.org/viewvc?rev=1170330&view=rev
> > Log:
> > Fix 'Content-Encoding: gzip' missing if the first brigade passed
> > to deflate_out_buffer contained zero data bytes but no EOS
> > bucket.
> >
> > Don't compress if the added headers and checksums are larger than
> > the data to compress (and we know the size of the data in
> > advance).
> >
> > 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/m
> > od_deflate.c?rev=1170330&r1=1170329&r2=1170330&view=diff
> > ================================================================
> > ============== ---
> > httpd/httpd/trunk/modules/filters/mod_deflate.c (original) +++
> > httpd/httpd/trunk/modules/filters/mod_deflate.c Tue Sep 13
> > 20:17:18 2011 @@ -426,7 +426,7 @@ static apr_status_t
> > deflate_out_filter(a
> >
> > request_rec *r = f->r;
> > deflate_ctx *ctx = f->ctx;
> > int zRC;
> >
> > - apr_size_t len;
> > + apr_size_t len = 0, blen;
> >
> > const char *data;
> > deflate_filter_config *c;
> >
> > @@ -448,28 +448,41 @@ static apr_status_t deflate_out_filter(a
> >
> > 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)) {
> > - e = APR_BUCKET_NEXT(e);
> > - continue;
> > - }
> > + e = APR_BRIGADE_LAST(bb);
> > + if (APR_BUCKET_IS_EOS(e)) {
>
> Does this work if e is the the sentinel (in case of an empty
> brigade)?
No, but there is a check at the start of deflate_out_filter() that bb
is not empty.