# HG changeset patch # User Igor Sysoev # Date 1194443972 0 # Node ID 54377021b936175bb93bcf9d8c90e2346972a1ba # Parent e2ab812358bd6940580830eb110ec80d30c29ca0 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 --- a/src/http/modules/ngx_http_sub_filter_module.c +++ b/src/http/modules/ngx_http_sub_filter_module.c @@ -369,9 +369,14 @@ ngx_http_sub_body_filter(ngx_http_reques } } - 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 @@ ngx_http_sub_parse(ngx_http_request_t *r ch = ngx_tolower(ch); } + ctx->state = state; ctx->pos = p; ctx->looked = looked; ctx->copy_end = p; @@ -578,6 +584,10 @@ ngx_http_sub_parse(ngx_http_request_t *r 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;