[PATCH] Chunked filter: check if ctx is null

Jan Prachar jan at prachar.eu
Thu Jan 4 22:08:11 UTC 2018

Hello, thank you for response!

On Thu, 2018-01-04 at 03:42 +0300, Maxim Dounin wrote:
> Hello!
> On Wed, Jan 03, 2018 at 07:53:00PM +0100, Jan Pracha=C5=99 wrote:
> To catch cases when a duplicate response is returned after the
> header was already sent we have a dedicated check in the
> ngx_http_send_header() function, see this commit for details:
> http://hg.nginx.org/nginx/rev/03ff14058272
> Trying to bypass this check is a bad idea.  The same applies to
> conditionally sending headers based on the r->headers_sent flag,
> as it will mean that the check will be bypassed.  This is what the
> lua module seems to be doing, and it should be fixed to avoid
> doing this.

Lua module checks r->header_sent in function
ngx_http_lua_send_header_if_needed(), which is called with every
output. See

So you suggest, that they should have their own flag (like they already
had - ctx->headers_sent) and always call ngx_http_send_header()
function, if this flag is not set?

> The other part of the equation is how and why error_page is called
> after the header as already sent.  If you know a scenario where
> error_page can be called with the header already sent, you may
> want focus on reproducing and fixing this.  Normally this is
> expected to result in the "header already sent" alerts produced by
> the check discussed above.

On the nginx side it is cause by this:


If writing to client returns an error and thus u->pipe-
>downstream_error is 1 and then reading from upstream fails and thus u-
>pipe->upstream_error is 1. ngx_http_upstream_finalize_request() is
then called with rc=NGX_HTTP_BAD_GATEWAY, where thanks to the above
commit the ngx_http_finalize_request() function is called also with
rc=NGX_HTTP_BAD_GATEWAY and thus error_page is called (if it is
configured for 502 status).

I think, that the ngx_http_finalize_request() function should be called
with rc=NGX_ERROR in this case.

Jan Prachar

More information about the nginx-devel mailing list