]> granicus.if.org Git - apache/commitdiff
If ProxyPassReverse is used for reverse mapping of relative redirects, subsequent...
authorChristophe Jaillet <jailletc36@apache.org>
Wed, 1 Aug 2018 18:53:53 +0000 (18:53 +0000)
committerChristophe Jaillet <jailletc36@apache.org>
Wed, 1 Aug 2018 18:53:53 +0000 (18:53 +0000)
PR 60408 [Peter Haworth <pmh1wheel gmail.com>]

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1837250 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
modules/proxy/proxy_util.c

diff --git a/CHANGES b/CHANGES
index c1fb11d58c1e7580eec073e031d303c3a4e14f7f..1e26ed7786ff201127a422a02987e2d33df30c3c 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,10 @@
                                                          -*- coding: utf-8 -*-
 Changes with Apache 2.5.1
 
+  *) mod_proxy: If ProxyPassReverse is used for reverse mapping of relative
+     redirects, subsequent ProxyPassReverse statements, whether they are
+     relative or absolute, may fail.  PR 60408.  [Peter Haworth <pmh1wheel gmail.com>]
+
   *) mod_ratelimit: Don't interfere with "chunked" encoding, fixing regression
      introduced in 2.4.34.  PR 62568.  [Yann Ylavic]
 
index 5aac76f65c5dbcba0c1cd8e4ce0845732d46d08d..24468f97bd1b4e29bd5db7ecf8b1c034f7e948f0 100644 (file)
@@ -830,7 +830,7 @@ PROXY_DECLARE(const char *) ap_proxy_location_reverse_map(request_rec *r,
 {
     proxy_req_conf *rconf;
     struct proxy_alias *ent;
-    int i, l1, l2;
+    int i, l1, l1_orig, l2;
     char *u;
 
     /*
@@ -842,7 +842,7 @@ PROXY_DECLARE(const char *) ap_proxy_location_reverse_map(request_rec *r,
         return url;
     }
 
-    l1 = strlen(url);
+    l1_orig = strlen(url);
     if (conf->interpolate_env == 1) {
         rconf = ap_get_module_config(r->request_config, &proxy_module);
         ent = (struct proxy_alias *)rconf->raliases->elts;
@@ -855,6 +855,10 @@ PROXY_DECLARE(const char *) ap_proxy_location_reverse_map(request_rec *r,
             ap_get_module_config(r->server->module_config, &proxy_module);
         proxy_balancer *balancer;
         const char *real = ent[i].real;
+
+        /* Restore the url length, if it had been changed by the code below */
+        l1 = l1_orig;
+
         /*
          * First check if mapping against a balancer and see
          * if we have such a entity. If so, then we need to