mirror of
https://github.com/nginx/nginx.git
synced 2025-02-25 18:55:26 -06:00
Sub filter: fixed subrequests handling.
In particular, properly output partial match at the end of a subrequest response (much like we do at the end of a response), and reset/set the last_in_chain flag as appropriate. Reported by KAWAHARA Masashi.
This commit is contained in:
parent
21655ae097
commit
e36718de4b
@ -305,6 +305,7 @@ ngx_http_sub_body_filter(ngx_http_request_t *r, ngx_chain_t *in)
|
|||||||
b->last = ctx->copy_end;
|
b->last = ctx->copy_end;
|
||||||
b->shadow = NULL;
|
b->shadow = NULL;
|
||||||
b->last_buf = 0;
|
b->last_buf = 0;
|
||||||
|
b->last_in_chain = 0;
|
||||||
b->recycled = 0;
|
b->recycled = 0;
|
||||||
|
|
||||||
if (b->in_file) {
|
if (b->in_file) {
|
||||||
@ -374,7 +375,9 @@ ngx_http_sub_body_filter(ngx_http_request_t *r, ngx_chain_t *in)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ctx->buf->last_buf && ctx->looked.len) {
|
if (ctx->looked.len
|
||||||
|
&& (ctx->buf->last_buf || ctx->buf->last_in_chain))
|
||||||
|
{
|
||||||
cl = ngx_chain_get_free_buf(r->pool, &ctx->free);
|
cl = ngx_chain_get_free_buf(r->pool, &ctx->free);
|
||||||
if (cl == NULL) {
|
if (cl == NULL) {
|
||||||
return NGX_ERROR;
|
return NGX_ERROR;
|
||||||
@ -394,7 +397,7 @@ ngx_http_sub_body_filter(ngx_http_request_t *r, ngx_chain_t *in)
|
|||||||
ctx->looked.len = 0;
|
ctx->looked.len = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ctx->buf->last_buf || ctx->buf->flush
|
if (ctx->buf->last_buf || ctx->buf->flush || ctx->buf->sync
|
||||||
|| ngx_buf_in_memory(ctx->buf))
|
|| ngx_buf_in_memory(ctx->buf))
|
||||||
{
|
{
|
||||||
if (b == NULL) {
|
if (b == NULL) {
|
||||||
@ -414,6 +417,7 @@ ngx_http_sub_body_filter(ngx_http_request_t *r, ngx_chain_t *in)
|
|||||||
}
|
}
|
||||||
|
|
||||||
b->last_buf = ctx->buf->last_buf;
|
b->last_buf = ctx->buf->last_buf;
|
||||||
|
b->last_in_chain = ctx->buf->last_in_chain;
|
||||||
b->flush = ctx->buf->flush;
|
b->flush = ctx->buf->flush;
|
||||||
b->shadow = ctx->buf;
|
b->shadow = ctx->buf;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user