zero size buf in writer in 1.17.2

Witold Filipczyk witekfl at gazeta.pl
Tue Jul 30 11:23:26 UTC 2019


On Mon, Jul 29, 2019 at 07:48:41PM +0300, Maxim Dounin wrote:
> Hello!
> 
> On Sun, Jul 28, 2019 at 04:32:18PM +0200, Witold Filipczyk wrote:
> 
> > Hi,
> > There is error in log:
> > 2019/07/28 09:46:10 [alert] 2471467#2471467: *407 zero size buf in writer t:1 r:1 f:0 00007F482A259000 00007F482A259000-00007F482A259000 0000000000000000 0-0 while sending response to client, client: 127.0.0.1, server: localhost, request: "GET /Skrypty-m.js HTTP/1.1", host: "localhost"
> > 
> > Reproducible at least on two machines.
> 
> [...]
> 
> > Skrypty-m.js in the attachment.
> > The error does not occur in 1.17.1 and earlier.
> 
> Thank you for the report, it seems to be a problem introduced in 
> ac5a741d39cf.  I'm able to reproduce it with the file and gzip 
> configuration provided.
> 
> The following patch should fix this:
> 
> # HG changeset patch
> # User Maxim Dounin <mdounin at mdounin.ru>
> # Date 1564415524 -10800
> #      Mon Jul 29 18:52:04 2019 +0300
> # Node ID aff4d33c72d8ee1a986d3e4c8e5c0f3d1b20962f
> # Parent  e7181cfe9212de7f67df805bb746519c059b490b
> Gzip: fixed "zero size buf" alerts after ac5a741d39cf.
> 
> After ac5a741d39cf it is now possible that after zstream.avail_out
> reaches 0 and we allocate additional buffer, there will be no more data
> to put into this buffer, triggering "zero size buf" alert.
> 
> Fix is to avoid allocating additional buffer in this case, by checking
> if last deflate() call returned Z_STREAM_END.
> 
> diff --git a/src/http/modules/ngx_http_gzip_filter_module.c b/src/http/modules/ngx_http_gzip_filter_module.c
> --- a/src/http/modules/ngx_http_gzip_filter_module.c
> +++ b/src/http/modules/ngx_http_gzip_filter_module.c
> @@ -778,7 +778,7 @@ ngx_http_gzip_filter_deflate(ngx_http_re
>  
>      ctx->out_buf->last = ctx->zstream.next_out;
>  
> -    if (ctx->zstream.avail_out == 0) {
> +    if (ctx->zstream.avail_out == 0 && rc != Z_STREAM_END) {
>  
>          /* zlib wants to output some more gzipped data */
>  

No error so far, thanks.


More information about the nginx-devel mailing list