From: Joe Orton Date: Thu, 2 Feb 2017 17:07:15 +0000 (+0000) Subject: Merge r1726705 from trunk: X-Git-Tag: 2.4.26~336 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b5bad086a149bfeb9e06766b5e5e4f52411c35c4;p=thirdparty%2Fapache%2Fhttpd.git Merge r1726705 from trunk: mod_filter: Fix AddOutputFilterByType with non-content-level filters. PR: 58856 Submitted by: Micha Lenk Reviewed by: covener, jim, ylavic git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1781433 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index 5a32a640d5e..25a9c9568c0 100644 --- a/CHANGES +++ b/CHANGES @@ -2,6 +2,9 @@ Changes with Apache 2.4.26 + *) mod_filter: Fix AddOutputFilterByType with non-content-level filters. + PR 58856. [Micha Lenk ] + *) mod_watchdog: Fix semaphore leak over restarts. [Jim Jagielski] *) mod_http2: regression fix on PR 59348, on graceful restart, ongoing diff --git a/modules/filters/mod_filter.c b/modules/filters/mod_filter.c index 7b692233ee0..5b5ecf69712 100644 --- a/modules/filters/mod_filter.c +++ b/modules/filters/mod_filter.c @@ -444,6 +444,12 @@ static const char *add_filter(cmd_parms *cmd, void *CFG, ap_expr_info_t *node; const char *err = NULL; + /* if provider has been registered, we can look it up */ + provider_frec = ap_get_output_filter_handle(pname); + if (!provider_frec) { + return apr_psprintf(cmd->pool, "Unknown filter provider %s", pname); + } + /* fname has been declared with DeclareFilter, so we can look it up */ frec = apr_hash_get(cfg->live_filters, fname, APR_HASH_KEY_STRING); @@ -454,17 +460,13 @@ static const char *add_filter(cmd_parms *cmd, void *CFG, return c; } frec = apr_hash_get(cfg->live_filters, fname, APR_HASH_KEY_STRING); + frec->ftype = provider_frec->ftype; } if (!frec) { return apr_psprintf(cmd->pool, "Undeclared smart filter %s", fname); } - /* if provider has been registered, we can look it up */ - provider_frec = ap_get_output_filter_handle(pname); - if (!provider_frec) { - return apr_psprintf(cmd->pool, "Unknown filter provider %s", pname); - } provider = apr_palloc(cmd->pool, sizeof(ap_filter_provider_t)); if (expr) { node = ap_expr_parse_cmd(cmd, expr, 0, &err, NULL);