]> git.kaiwu.me - nginx.git/commitdiff
Request body: fixed client_body_in_file_only.
authorMaxim Dounin <mdounin@mdounin.ru>
Fri, 1 Feb 2013 14:38:18 +0000 (14:38 +0000)
committerMaxim Dounin <mdounin@mdounin.ru>
Fri, 1 Feb 2013 14:38:18 +0000 (14:38 +0000)
After introduction of chunked request body reading support in 1.3.9 (r4931),
the rb->bufs wasn't set if request body was fully preread while calling the
ngx_http_read_client_request_body() function.

Reported by Yichun Zhang (agentzh).

src/http/ngx_http_request_body.c

index 749e4aedb13555c322af9d9eabf7171a9adadf82..cafc5599260f2a2429fb2e63d16caf81642dea34 100644 (file)
@@ -35,7 +35,8 @@ ngx_http_read_client_request_body(ngx_http_request_t *r,
     size_t                     preread;
     ssize_t                    size;
     ngx_int_t                  rc;
-    ngx_chain_t                out;
+    ngx_buf_t                 *b;
+    ngx_chain_t                out, *cl;
     ngx_http_request_body_t   *rb;
     ngx_http_core_loc_conf_t  *clcf;
 
@@ -128,6 +129,21 @@ ngx_http_read_client_request_body(ngx_http_request_t *r,
                 rc = NGX_HTTP_INTERNAL_SERVER_ERROR;
                 goto done;
             }
+
+            cl = ngx_chain_get_free_buf(r->pool, &rb->free);
+            if (cl == NULL) {
+                return NGX_HTTP_INTERNAL_SERVER_ERROR;
+            }
+
+            b = cl->buf;
+
+            ngx_memzero(b, sizeof(ngx_buf_t));
+
+            b->in_file = 1;
+            b->file_last = rb->temp_file->file.offset;
+            b->file = &rb->temp_file->file;
+
+            rb->bufs = cl;
         }
 
         post_handler(r);