Request body: fixed client_body_in_file_only.

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).
This commit is contained in:
Maxim Dounin 2013-02-01 14:38:18 +00:00
parent 2887c06fde
commit e97e4124e3

View File

@ -35,7 +35,8 @@ ngx_http_read_client_request_body(ngx_http_request_t *r,
size_t preread; size_t preread;
ssize_t size; ssize_t size;
ngx_int_t rc; 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_request_body_t *rb;
ngx_http_core_loc_conf_t *clcf; 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; rc = NGX_HTTP_INTERNAL_SERVER_ERROR;
goto done; 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); post_handler(r);