From: Jim Jagielski Date: Tue, 15 Apr 2014 19:17:56 +0000 (+0000) Subject: Merge r1564437 from trunk: X-Git-Tag: 2.4.10~341 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=749f1b998930bc1699872e135bf05c836e37db94;p=apache Merge r1564437 from trunk: * Do not parse URL in case of regular expression as they likely do not follow the URL syntax. PR: 56074 Submitted by: rpluem Reviewed/backported by: jim git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1587699 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index a68631ab7e..f7c791375a 100644 --- a/CHANGES +++ b/CHANGES @@ -2,6 +2,10 @@ Changes with Apache 2.4.10 + *) mod_proxy: Do not try to parse the regular expressions passed by + ProxyPassMatch as URL as they do not follow their syntax. + PR 56074. [Ruediger Pluem] + *) mod_reqtimeout: Resolve unexpected timeouts on keepalive requests under the Event MPM. PR56216. [Frank Meier ] diff --git a/STATUS b/STATUS index 8e5799009f..bc4a33d12c 100644 --- a/STATUS +++ b/STATUS @@ -100,13 +100,6 @@ RELEASE SHOWSTOPPERS: PATCHES ACCEPTED TO BACKPORT FROM TRUNK: [ start all new proposals below, under PATCHES PROPOSED. ] - * mod_proxy: Do not parse URL in case of regular expression as they likely - do not follow the URL syntax. PR: 56074 - Trunk version of patch: - http://svn.apache.org/r1564437 - Backport version for 2.4.x of patch: - Trunk version of patch works - +1: rpluem, jim, ylavic PATCHES PROPOSED TO BACKPORT FROM TRUNK: diff --git a/modules/proxy/mod_proxy.c b/modules/proxy/mod_proxy.c index 627a0496f9..22a022099b 100644 --- a/modules/proxy/mod_proxy.c +++ b/modules/proxy/mod_proxy.c @@ -1584,13 +1584,26 @@ static const char * /* Distinguish the balancer from worker */ if (ap_proxy_valid_balancer_name(r, 9)) { proxy_balancer *balancer = ap_proxy_get_balancer(cmd->pool, conf, r, 0); + char *fake_copy; + + /* + * In the regex case supplying a fake URL doesn't make sense as it + * cannot be parsed anyway with apr_uri_parse later on in + * ap_proxy_define_balancer / ap_proxy_update_balancer + */ + if (use_regex) { + fake_copy = NULL; + } + else { + fake_copy = f; + } if (!balancer) { - const char *err = ap_proxy_define_balancer(cmd->pool, &balancer, conf, r, f, 0); + const char *err = ap_proxy_define_balancer(cmd->pool, &balancer, conf, r, fake_copy, 0); if (err) return apr_pstrcat(cmd->temp_pool, "ProxyPass ", err, NULL); } else { - ap_proxy_update_balancer(cmd->pool, balancer, f); + ap_proxy_update_balancer(cmd->pool, balancer, fake_copy); } for (i = 0; i < arr->nelts; i++) { const char *err = set_balancer_param(conf, cmd->pool, balancer, elts[i].key, diff --git a/modules/proxy/proxy_util.c b/modules/proxy/proxy_util.c index d3bc1d0457..b9944ccbdc 100644 --- a/modules/proxy/proxy_util.c +++ b/modules/proxy/proxy_util.c @@ -1123,6 +1123,9 @@ PROXY_DECLARE(char *) ap_proxy_update_balancer(apr_pool_t *p, const char *url) { apr_uri_t puri; + if (!url) { + return NULL; + } if (apr_uri_parse(p, url, &puri) != APR_SUCCESS) { return apr_psprintf(p, "unable to parse: %s", url); }