]> git.kaiwu.me - nginx.git/commit
Output chain: clear the last_buf flag unless inherited.
authorSergey Kandaurov <pluknet@nginx.com>
Wed, 24 Dec 2025 21:21:52 +0000 (01:21 +0400)
committerSergey Kandaurov <s.kandaurov@f5.com>
Thu, 29 Jan 2026 10:52:41 +0000 (14:52 +0400)
commit3afd85e4b5cbb0c49608b04e06ea7b5ef97b3308
tree8951185a6ecd5299f08fe1b0d754a4b2e10988ea
parentcd12dc4f12489257e851654ec1883cf06fa0b095
Output chain: clear the last_buf flag unless inherited.

For instance, the last_buf flag is used in the http proxy module when
creating HTTP/2 requests to indicate the output is closed.  The flag
is inherited in ngx_output_chain() to a destination buffer when reading
the buffered request body.  Then it is used in the proxy output filter
to mark the last HTTP/2 DATA frame with END_STREAM.

The problem happens when reusing the destination buffer, such as to
re-read the buffered request body on next upstream, because this buffer
may contain a dirty last_buf value, which breaks sending HTTP/2 request
body in multiple output filter calls.

The flush and last_in_chain flags are cleared for consistency.
src/core/ngx_output_chain.c