mirror of
https://github.com/nginx/nginx.git
synced 2024-12-02 20:09:01 +08:00
Request body: $request_body variable generalization.
The $request_body variable was assuming there can't be more than two buffers. While this is currently true due to request body reading implementation details, this is not a good thing to depend on and may change in the future.
This commit is contained in:
parent
ab5ac3b095
commit
743922a2ce
@ -1767,7 +1767,7 @@ ngx_http_variable_request_body(ngx_http_request_t *r,
|
|||||||
{
|
{
|
||||||
u_char *p;
|
u_char *p;
|
||||||
size_t len;
|
size_t len;
|
||||||
ngx_buf_t *buf, *next;
|
ngx_buf_t *buf;
|
||||||
ngx_chain_t *cl;
|
ngx_chain_t *cl;
|
||||||
|
|
||||||
if (r->request_body == NULL
|
if (r->request_body == NULL
|
||||||
@ -1792,8 +1792,13 @@ ngx_http_variable_request_body(ngx_http_request_t *r,
|
|||||||
return NGX_OK;
|
return NGX_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
next = cl->next->buf;
|
len = buf->last - buf->pos;
|
||||||
len = (buf->last - buf->pos) + (next->last - next->pos);
|
cl = cl->next;
|
||||||
|
|
||||||
|
for ( /* void */ ; cl; cl = cl->next) {
|
||||||
|
buf = cl->buf;
|
||||||
|
len += buf->last - buf->pos;
|
||||||
|
}
|
||||||
|
|
||||||
p = ngx_pnalloc(r->pool, len);
|
p = ngx_pnalloc(r->pool, len);
|
||||||
if (p == NULL) {
|
if (p == NULL) {
|
||||||
@ -1801,9 +1806,12 @@ ngx_http_variable_request_body(ngx_http_request_t *r,
|
|||||||
}
|
}
|
||||||
|
|
||||||
v->data = p;
|
v->data = p;
|
||||||
|
cl = r->request_body->bufs;
|
||||||
|
|
||||||
p = ngx_cpymem(p, buf->pos, buf->last - buf->pos);
|
for ( /* void */ ; cl; cl = cl->next) {
|
||||||
ngx_memcpy(p, next->pos, next->last - next->pos);
|
buf = cl->buf;
|
||||||
|
p = ngx_cpymem(p, buf->pos, buf->last - buf->pos);
|
||||||
|
}
|
||||||
|
|
||||||
v->len = len;
|
v->len = len;
|
||||||
v->valid = 1;
|
v->valid = 1;
|
||||||
|
Loading…
Reference in New Issue
Block a user