Mercurial > hg > nginx
changeset 8147:72627f1cf09e
HTTP/2: socket leak with "return 444" in error_page (ticket #2455).
Similarly to ticket #274 (7354:1812f1d79d84), early request finalization
without calling ngx_http_run_posted_requests() resulted in a connection
hang (a socket leak) if the 400 (Bad Request) error was generated in
ngx_http_v2_state_process_header() due to invalid request headers and
"return 444" was used in error_page 400.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Fri, 10 Mar 2023 06:47:48 +0300 |
parents | b7d4bfd132d2 |
children | 9db24374123b |
files | src/http/v2/ngx_http_v2.c |
diffstat | 1 files changed, 4 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/http/v2/ngx_http_v2.c Wed Mar 08 22:22:47 2023 +0300 +++ b/src/http/v2/ngx_http_v2.c Fri Mar 10 06:47:48 2023 +0300 @@ -1730,6 +1730,7 @@ size_t len; ngx_int_t rc; ngx_table_elt_t *h; + ngx_connection_t *fc; ngx_http_header_t *hh; ngx_http_request_t *r; ngx_http_v2_header_t *header; @@ -1789,6 +1790,7 @@ } r = h2c->state.stream->request; + fc = r->connection; /* TODO Optimization: validate headers while parsing. */ if (ngx_http_v2_validate_header(r, header) != NGX_OK) { @@ -1886,6 +1888,8 @@ h2c->state.stream = NULL; + ngx_http_run_posted_requests(fc); + return ngx_http_v2_state_header_complete(h2c, pos, end); }