diff options
author | Maxim Dounin <mdounin@mdounin.ru> | 2013-09-27 16:50:26 +0400 |
---|---|---|
committer | Maxim Dounin <mdounin@mdounin.ru> | 2013-09-27 16:50:26 +0400 |
commit | c4b5a1fe5ee0cbfabc74c0fef18e9a946c57f29e (patch) | |
tree | 57770f422d92b3029389836283d135fdbf720e09 | |
parent | 239c4037ceb306552f884a57de5abdea2186e7d7 (diff) | |
download | nginx-c4b5a1fe5ee0cbfabc74c0fef18e9a946c57f29e.tar.gz nginx-c4b5a1fe5ee0cbfabc74c0fef18e9a946c57f29e.zip |
Upstream: subrequest_in_memory fix.
With previous code only part of u->buffer might be emptied in case
of special responses, resulting in partial responses seen by SSI set
in case of simple protocols, or spurious errors like "upstream sent
invalid chunked response" in case of complex ones.
-rw-r--r-- | src/http/ngx_http_upstream.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c index 2321f6e97..4a4f8eba2 100644 --- a/src/http/ngx_http_upstream.c +++ b/src/http/ngx_http_upstream.c @@ -1711,10 +1711,6 @@ ngx_http_upstream_process_header(ngx_http_request_t *r, ngx_http_upstream_t *u) if (u->headers_in.status_n >= NGX_HTTP_SPECIAL_RESPONSE) { - if (r->subrequest_in_memory) { - u->buffer.last = u->buffer.pos; - } - if (ngx_http_upstream_test_next(r, u) == NGX_OK) { return; } @@ -3464,6 +3460,12 @@ ngx_http_upstream_finalize_request(ngx_http_request_t *r, #endif + if (r->subrequest_in_memory + && u->headers_in.status_n >= NGX_HTTP_SPECIAL_RESPONSE) + { + u->buffer.last = u->buffer.pos; + } + if (rc == NGX_DECLINED) { return; } |