From c4b5a1fe5ee0cbfabc74c0fef18e9a946c57f29e Mon Sep 17 00:00:00 2001 From: Maxim Dounin Date: Fri, 27 Sep 2013 16:50:26 +0400 Subject: 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. --- src/http/ngx_http_upstream.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'src/http/ngx_http_upstream.c') 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; } -- cgit