Found during QA of the CVE-2016-8743 patch here.  The merging logic in 
merge_core_server_configs is (confusingly) inverted from 2.2 to 2.4, so 
e.g. HttpProtocolOptions doesn't inherit from global to vhost configs in 
2.2.32. :(

Index: server/core.c
===================================================================
--- server/core.c       (revision 1783354)
+++ server/core.c       (working copy)
@@ -546,15 +546,19 @@
                            ? virt->merge_trailers
                            : base->merge_trailers;
 
-    if (virt->http09_enable != AP_HTTP09_UNSET)
-        conf->http09_enable = virt->http09_enable;
+    if (conf->http09_enable == AP_HTTP09_UNSET)
+        conf->http09_enable = base->http09_enable;
 
-    if (virt->http_conformance != AP_HTTP_CONFORMANCE_UNSET)
-        conf->http_conformance = virt->http_conformance;
+    if (conf->http_conformance == AP_HTTP_CONFORMANCE_UNSET)
+        conf->http_conformance = base->http_conformance;
 
-    if (virt->http_methods != AP_HTTP_METHODS_UNSET)
-        conf->http_methods = virt->http_methods;
+    if (conf->http_methods == AP_HTTP_METHODS_UNSET)
+        conf->http_methods = base->http_methods;
 
+    /* N.B. If you backport things here from 2.4, note that the
+     * merging logic needs to be inverted, since conf is initially a
+     * copy of vertv not basev. */
+    
     return conf;
 }
 

Reply via email to