fix XSLT filter in SSI subrequests

This commit is contained in:
Igor Sysoev 2009-05-28 15:42:27 +00:00
parent 65105aaae3
commit 21c2cf88c1
2 changed files with 7 additions and 4 deletions

View File

@ -503,6 +503,7 @@ ngx_output_chain_copy_buf(ngx_output_chain_ctx_t *ctx)
if (src->pos == src->last) {
dst->flush = src->flush;
dst->last_buf = src->last_buf;
dst->last_in_chain = src->last_in_chain;
}
} else {
@ -577,6 +578,7 @@ ngx_output_chain_copy_buf(ngx_output_chain_ctx_t *ctx)
if (src->file_pos == src->file_last) {
dst->flush = src->flush;
dst->last_buf = src->last_buf;
dst->last_in_chain = src->last_in_chain;
}
}

View File

@ -280,7 +280,7 @@ ngx_http_xslt_body_filter(ngx_http_request_t *r, ngx_chain_t *in)
return ngx_http_xslt_send(r, ctx, NULL);
}
if (cl->buf->last_buf) {
if (cl->buf->last_buf || cl->buf->last_in_chain) {
ctx->doc = ctx->ctxt->myDoc;
@ -427,8 +427,8 @@ ngx_http_xslt_add_chunk(ngx_http_request_t *r, ngx_http_xslt_filter_ctx_t *ctx,
ctx->request = r;
}
err = xmlParseChunk(ctx->ctxt, (char *) b->pos,
(int) (b->last - b->pos), b->last_buf);
err = xmlParseChunk(ctx->ctxt, (char *) b->pos, (int) (b->last - b->pos),
(b->last_buf) || (b->last_in_chain));
if (err == 0) {
b->pos = b->last;
@ -812,7 +812,6 @@ ngx_http_xslt_apply_stylesheet(ngx_http_request_t *r,
b->pos = buf;
b->last = buf + len;
b->memory = 1;
b->last_buf = 1;
if (encoding) {
r->headers_out.charset.len = ngx_strlen(encoding);
@ -823,6 +822,8 @@ ngx_http_xslt_apply_stylesheet(ngx_http_request_t *r,
return b;
}
b->last_buf = 1;
if (type) {
len = ngx_strlen(type);