On Fri, Apr 18, 2014 at 5:57 PM, Yann Ylavic <[email protected]> wrote:
> Patch inline.
>
> Index: modules/proxy/proxy_util.c
> ===================================================================
> --- modules/proxy/proxy_util.c (revision 1588466)
> +++ modules/proxy/proxy_util.c (working copy)
> @@ -1508,32 +1508,111 @@ PROXY_DECLARE(char *) ap_proxy_worker_name(apr_poo
[...]
> +PROXY_DECLARE(proxy_worker *) ap_proxy_get_worker_ex(apr_pool_t *p,
> + proxy_balancer
> *balancer,
> + proxy_server_conf *conf,
> + const char *url, int
> uds,
> + char **to, char **by)
> +{
[...]
> + if (!uds) {
> + /* No real interest in *to or *by being used without uds,
> + * don't leave dangling pointers anyway.
> + */
> + if (to) {
> + *to = NULL;
> + }
> + if (by) {
> + *by = NULL;
> + }
> + url_length = 0;
> + url_copy = NULL;
> + }
> + else {
> + url_length = strlen(url);
Not the right place to initialize url_length, will be fixed in next
patch (if useful).
> + url_copy = apr_pstrmemdup(p, url, url_length);
> + url_copy = ap_proxy_split_url(p, url_copy, by);
> + if (to) {
> + *to = url_copy;
> + }
> + url = url_copy;
> + }
> +
> c = ap_strchr_c(url, ':');
> if (c == NULL || c[1] != '/' || c[2] != '/' || c[3] == '\0') {
> return NULL;
> }
>
> - url_length = strlen(url);
> - url_copy = apr_pstrmemdup(p, url, url_length);
> + if (!url_copy) {
> + url_length = strlen(url);
> + url_copy = apr_pstrmemdup(p, url, url_length);
> + }
>
Please read something the following instead :
+ if (!uds) {
+ /* No real interest in *to or *by being used without uds,
+ * don't leave dangling pointers anyway.
+ */
+ if (to) {
+ *to = NULL;
+ }
+ if (by) {
+ *by = NULL;
+ }
+ url_copy = NULL;
+ }
+ else {
+ url_copy = ap_proxy_split_url(p, apr_pstrdup(p, url), by);
+ if (to) {
+ *to = url_copy;
+ }
+ url = url_copy;
+ }
+
c = ap_strchr_c(url, ':');
if (c == NULL || c[1] != '/' || c[2] != '/' || c[3] == '\0') {
return NULL;
}
url_length = strlen(url);
- url_copy = apr_pstrmemdup(p, url, url_length);
+ if (url_copy == NULL) {
+ url_copy = apr_pstrmemdup(p, url, url_length);
+ }