]> granicus.if.org Git - apache/commitdiff
Merge r1726705 from trunk:
authorJoe Orton <jorton@apache.org>
Thu, 2 Feb 2017 17:07:15 +0000 (17:07 +0000)
committerJoe Orton <jorton@apache.org>
Thu, 2 Feb 2017 17:07:15 +0000 (17:07 +0000)
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

CHANGES
modules/filters/mod_filter.c

diff --git a/CHANGES b/CHANGES
index 5a32a640d5ec4041374b22bfa87bfb1cad74186c..25a9c9568c02cf7b16366a61514d02f16b1744fb 100644 (file)
--- 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 <micha lenk.info>]
   *) mod_watchdog: Fix semaphore leak over restarts.  [Jim Jagielski]
 
   *) mod_http2: regression fix on PR 59348, on graceful restart, ongoing 
index 7b692233ee007e38f2559de41dba91c8bd843729..5b5ecf69712a60aac7b4ce92d6fcc68e43124ffb 100644 (file)
@@ -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);