Hello!

A couple of years ago, I've reported the following bug:
http://mailman.nginx.org/pipermail/nginx-devel/2013-October/004442.html

Responses with empty bodies with the header "Content-Encoding: gzip" used to 
cause requests to hang.
There has been a fix, but now it seems that the requests simply fails.

Reviewing the code, it appears that the following happens:
- An empty last buffer arrives into the gunzip module's body filter.
- The gunzip module's ngx_http_gunzip_filter_add_data() calculates and input 
buffer size (it is 0), and it is later in fed to zlib's inflate(), along with 
the paramter Z_FINISH
- inflate() is later called, and returned Z_BUF_ERROR. This causes error 
handling to shut down the request and the connection. The client gets an empty 
response.

I'm not sure what a proper fix would be, but I can suggest the following:
1. In ngx_http_gunzip_header_filter() check the content length, and don't 
create a gunzip ctx if it is 0.
2. In ngx_http_gunzip_body_filter(), check if gunzip has started 
("!ctx->started"). If it hasn't and the input buffer is the last one, simply 
jump to the next filter. This handles the case that the response with is 
chunked encoding.

Would be great to hear the development team's opinion.

Best regards,
Aviram


_______________________________________________
nginx-devel mailing list
[email protected]
http://mailman.nginx.org/mailman/listinfo/nginx-devel

Reply via email to