From: Jim Jagielski Date: Wed, 7 Nov 2018 15:18:42 +0000 (+0000) Subject: Merge r1837250 from trunk: X-Git-Tag: 2.4.38~86 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c261865277bca8c4e1a086f366af7a6e81f1a49c;p=thirdparty%2Fapache%2Fhttpd.git Merge r1837250 from trunk: 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 ] Submitted by: jailletc36 Reviewed by: jailletc36, rpluem, jim git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1846044 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index 519ee2a1c50..6e2dba0e66f 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,10 @@ -*- coding: utf-8 -*- Changes with Apache 2.4.38 + *) 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 ] + Changes with Apache 2.4.37 *) mod_ssl: Fix HTTP/2 failures when using OpenSSL 1.1.1. [Rainer Jung] diff --git a/STATUS b/STATUS index 5954d512c12..3b4982d1f4b 100644 --- a/STATUS +++ b/STATUS @@ -126,12 +126,6 @@ RELEASE SHOWSTOPPERS: PATCHES ACCEPTED TO BACKPORT FROM TRUNK: [ start all new proposals below, under PATCHES PROPOSED. ] - *) 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 - trunk patch: http://svn.apache.org/r1837250 - 2.4.x patch: svn merge -c 1837250 ^/httpd/httpd/trunk . - +1: jailletc36, rpluem, jim PATCHES PROPOSED TO BACKPORT FROM TRUNK: diff --git a/modules/proxy/proxy_util.c b/modules/proxy/proxy_util.c index 6501c680649..cbf88267771 100644 --- a/modules/proxy/proxy_util.c +++ b/modules/proxy/proxy_util.c @@ -837,7 +837,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; /* @@ -849,7 +849,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; @@ -862,6 +862,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