Welcome! Log In Create A New Profile

Advanced

[nginx] svn commit: r4469 - trunk/src/http/modules

Anonymous User
February 13, 2012 10:24AM
Author: mdounin
Date: 2012-02-13 15:23:43 +0000 (Mon, 13 Feb 2012)
New Revision: 4469

Log:
Gzip filter: handling of empty flush buffers.

Empty flush buffers are legitimate and may happen e.g. due to $r->flush()
calls in embedded perl. If there are no data buffered in zlib, deflate()
will return Z_BUF_ERROR (i.e. no progress possible) without adding anything
to output. Don't treat Z_BUF_ERROR as fatal and correctly send empty flush
buffer if we have no data in output at all.

See this thread for details:
http://mailman.nginx.org/pipermail/nginx/2010-November/023693.html


Modified:
trunk/src/http/modules/ngx_http_gzip_filter_module.c

Modified: trunk/src/http/modules/ngx_http_gzip_filter_module.c
===================================================================
--- trunk/src/http/modules/ngx_http_gzip_filter_module.c 2012-02-13 15:20:49 UTC (rev 4468)
+++ trunk/src/http/modules/ngx_http_gzip_filter_module.c 2012-02-13 15:23:43 UTC (rev 4469)
@@ -759,6 +759,7 @@
ngx_http_gzip_filter_deflate(ngx_http_request_t *r, ngx_http_gzip_ctx_t *ctx)
{
int rc;
+ ngx_buf_t *b;
ngx_chain_t *cl;
ngx_http_gzip_conf_t *conf;

@@ -770,7 +771,7 @@

rc = deflate(&ctx->zstream, ctx->flush);

- if (rc != Z_OK && rc != Z_STREAM_END) {
+ if (rc != Z_OK && rc != Z_STREAM_END && rc != Z_BUF_ERROR) {
ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
"deflate() failed: %d, %d", ctx->flush, rc);
return NGX_ERROR;
@@ -819,8 +820,6 @@

if (ctx->flush == Z_SYNC_FLUSH) {

- ctx->zstream.avail_out = 0;
- ctx->out_buf->flush = 1;
ctx->flush = Z_NO_FLUSH;

cl = ngx_alloc_chain_link(r->pool);
@@ -828,7 +827,22 @@
return NGX_ERROR;
}

- cl->buf = ctx->out_buf;
+ b = ctx->out_buf;
+
+ if (ngx_buf_size(b) == 0) {
+
+ b = ngx_calloc_buf(ctx->request->pool);
+ if (b == NULL) {
+ return NGX_ERROR;
+ }
+
+ } else {
+ ctx->zstream.avail_out = 0;
+ }
+
+ b->flush = 1;
+
+ cl->buf = b;
cl->next = NULL;
*ctx->last_out = cl;
ctx->last_out = &cl->next;

_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[nginx] svn commit: r4469 - trunk/src/http/modules

Anonymous User 1188 February 13, 2012 10:24AM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 236
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready