Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nginx/nginx.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2009-05-28 19:42:27 +0400
committerIgor Sysoev <igor@sysoev.ru>2009-05-28 19:42:27 +0400
commit21c2cf88c1dc2df193a47fbd13ac9ff926066b8e (patch)
tree5226b6ce5a4eb7f4ed6dbb3804532dd448b301cf /src
parent65105aaae3aba1c238e1b2fce294661dbd82a27f (diff)
fix XSLT filter in SSI subrequests
Diffstat (limited to 'src')
-rw-r--r--src/core/ngx_output_chain.c2
-rw-r--r--src/http/modules/ngx_http_xslt_filter_module.c9
2 files changed, 7 insertions, 4 deletions
diff --git a/src/core/ngx_output_chain.c b/src/core/ngx_output_chain.c
index 71016996d..ee23e8fe1 100644
--- a/src/core/ngx_output_chain.c
+++ b/src/core/ngx_output_chain.c
@@ -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;
}
}
diff --git a/src/http/modules/ngx_http_xslt_filter_module.c b/src/http/modules/ngx_http_xslt_filter_module.c
index 9703b50ae..ab3118f78 100644
--- a/src/http/modules/ngx_http_xslt_filter_module.c
+++ b/src/http/modules/ngx_http_xslt_filter_module.c
@@ -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);