diff options
author | Sergey Kandaurov <pluknet@nginx.com> | 2020-07-13 15:34:22 +0300 |
---|---|---|
committer | Sergey Kandaurov <pluknet@nginx.com> | 2020-07-13 15:34:22 +0300 |
commit | 2346ee29e1333c20b9a9f9e5ea73940237fbff02 (patch) | |
tree | 9f7249e4871fe9a13799df5e16abbaa2ebd065ff /src/event/ngx_event_pipe.c | |
parent | 3db00b4da74ddc0872be4cdb836aaff7fc21272a (diff) | |
parent | 1b2f040a1f82dfd3b30d3b67ea57b3bf1d723d4d (diff) | |
download | nginx-2346ee29e1333c20b9a9f9e5ea73940237fbff02.tar.gz nginx-2346ee29e1333c20b9a9f9e5ea73940237fbff02.zip |
Merged with the default branch.
Diffstat (limited to 'src/event/ngx_event_pipe.c')
-rw-r--r-- | src/event/ngx_event_pipe.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/event/ngx_event_pipe.c b/src/event/ngx_event_pipe.c index 531b13aad..54412e130 100644 --- a/src/event/ngx_event_pipe.c +++ b/src/event/ngx_event_pipe.c @@ -960,6 +960,22 @@ ngx_event_pipe_copy_input_filter(ngx_event_pipe_t *p, ngx_buf_t *buf) return NGX_OK; } + if (p->upstream_done) { + ngx_log_debug0(NGX_LOG_DEBUG_EVENT, p->log, 0, + "input data after close"); + return NGX_OK; + } + + if (p->length == 0) { + p->upstream_done = 1; + + ngx_log_error(NGX_LOG_WARN, p->log, 0, + "upstream sent more data than specified in " + "\"Content-Length\" header"); + + return NGX_OK; + } + cl = ngx_chain_get_free_buf(p->pool, &p->free); if (cl == NULL) { return NGX_ERROR; @@ -987,6 +1003,18 @@ ngx_event_pipe_copy_input_filter(ngx_event_pipe_t *p, ngx_buf_t *buf) return NGX_OK; } + if (b->last - b->pos > p->length) { + + ngx_log_error(NGX_LOG_WARN, p->log, 0, + "upstream sent more data than specified in " + "\"Content-Length\" header"); + + b->last = b->pos + p->length; + p->upstream_done = 1; + + return NGX_OK; + } + p->length -= b->last - b->pos; return NGX_OK; |