Sub filter: restored ngx_http_set_ctx() at the proper place.

Previously, ngx_http_sub_header_filter() could fail with a partially
initialized context, later accessed in ngx_http_sub_body_filter()
if called from the perl content handler.

The issue had appeared in 2c045e5b8291 (1.9.4).

A better fix would be to handle ngx_http_send_header() errors in
the perl module, though this doesn't seem to be easy enough.
This commit is contained in:
Sergey Kandaurov 2017-04-18 19:55:23 +03:00
parent e8c579a187
commit cb7427d86c

View File

@ -248,8 +248,6 @@ ngx_http_sub_header_filter(ngx_http_request_t *r)
ctx->matches->nelts); ctx->matches->nelts);
} }
ngx_http_set_ctx(r, ctx, ngx_http_sub_filter_module);
ctx->saved.data = ngx_pnalloc(r->pool, ctx->tables->max_match_len - 1); ctx->saved.data = ngx_pnalloc(r->pool, ctx->tables->max_match_len - 1);
if (ctx->saved.data == NULL) { if (ctx->saved.data == NULL) {
return NGX_ERROR; return NGX_ERROR;
@ -260,6 +258,8 @@ ngx_http_sub_header_filter(ngx_http_request_t *r)
return NGX_ERROR; return NGX_ERROR;
} }
ngx_http_set_ctx(r, ctx, ngx_http_sub_filter_module);
ctx->offset = ctx->tables->min_match_len - 1; ctx->offset = ctx->tables->min_match_len - 1;
ctx->last_out = &ctx->out; ctx->last_out = &ctx->out;