Mercurial > hg > nginx
comparison src/http/modules/ngx_http_proxy_module.c @ 7760:83c4622053b0
Upstream: fixed zero size buf alerts on extra data (ticket #2117).
After 7675:9afa45068b8f and 7678:bffcc5af1d72 (1.19.1), during non-buffered
simple proxying, responses with extra data might result in zero size buffers
being generated and "zero size buf" alerts in writer. This bug is similar
to the one with FastCGI proxying fixed in 7689:da8d758aabeb.
In non-buffered mode, normally the filter function is not called if
u->length is already 0, since u->length is checked after each call of
the filter function. There is a case when this can happen though: if
the response length is 0, and there are pre-read response body data left
after reading response headers. As such, a check for u->length is needed
at the start of non-buffered filter functions, similar to the one
for p->length present in buffered filter functions.
Appropriate checks added to the existing non-buffered copy filters
in the upstream (used by scgi and uwsgi proxying) and proxy modules.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Tue, 12 Jan 2021 16:59:31 +0300 |
parents | 1a719ee45526 |
children | 529b73f75d19 |
comparison
equal
deleted
inserted
replaced
7759:a20eef9a1df2 | 7760:83c4622053b0 |
---|---|
2331 ngx_buf_t *b; | 2331 ngx_buf_t *b; |
2332 ngx_chain_t *cl, **ll; | 2332 ngx_chain_t *cl, **ll; |
2333 ngx_http_upstream_t *u; | 2333 ngx_http_upstream_t *u; |
2334 | 2334 |
2335 u = r->upstream; | 2335 u = r->upstream; |
2336 | |
2337 if (u->length == 0) { | |
2338 ngx_log_error(NGX_LOG_WARN, r->connection->log, 0, | |
2339 "upstream sent more data than specified in " | |
2340 "\"Content-Length\" header"); | |
2341 return NGX_OK; | |
2342 } | |
2336 | 2343 |
2337 for (cl = u->out_bufs, ll = &u->out_bufs; cl; cl = cl->next) { | 2344 for (cl = u->out_bufs, ll = &u->out_bufs; cl; cl = cl->next) { |
2338 ll = &cl->next; | 2345 ll = &cl->next; |
2339 } | 2346 } |
2340 | 2347 |