r1556, r1558 merge:
sub_filter fixes:
*) fix empty string replacement in sub_filter
*) add sub_filter parser fix similar to r1261 in SSI parser
*) fix case when pattern is split between two buffers:
it had been fixed in SSI parser long ago
diff --git a/src/http/modules/ngx_http_sub_filter_module.c b/src/http/modules/ngx_http_sub_filter_module.c
index d196c19..93d1b36 100644
--- a/src/http/modules/ngx_http_sub_filter_module.c
+++ b/src/http/modules/ngx_http_sub_filter_module.c
@@ -369,9 +369,14 @@
}
}
- b->memory = 1;
- b->pos = ctx->sub.data;
- b->last = ctx->sub.data + ctx->sub.len;
+ if (ctx->sub.len) {
+ b->memory = 1;
+ b->pos = ctx->sub.data;
+ b->last = ctx->sub.data + ctx->sub.len;
+
+ } else {
+ b->sync = 1;
+ }
cl->buf = b;
cl->next = NULL;
@@ -557,6 +562,7 @@
ch = ngx_tolower(ch);
}
+ ctx->state = state;
ctx->pos = p;
ctx->looked = looked;
ctx->copy_end = p;
@@ -578,6 +584,10 @@
looked++;
if (looked == ctx->match.len) {
+ if ((size_t) (p - ctx->pos) < looked) {
+ ctx->saved = 0;
+ }
+
ctx->state = sub_start_state;
ctx->pos = p + 1;
ctx->looked = looked;