]> git.kaiwu.me - nginx.git/commitdiff
Upstream: subrequest_in_memory fix.
authorMaxim Dounin <mdounin@mdounin.ru>
Fri, 27 Sep 2013 12:50:26 +0000 (16:50 +0400)
committerMaxim Dounin <mdounin@mdounin.ru>
Fri, 27 Sep 2013 12:50:26 +0000 (16:50 +0400)
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

index 2321f6e97917c900f0f0a351e614c5e2c5b7cf07..4a4f8eba23fb07cd9c2a4b53d7c34a8b29fc7360 100644 (file)
@@ -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;
     }