From 34e92f5e777f9df0976372455ef772a8788a8152 Mon Sep 17 00:00:00 2001
From: Fabian Keil <fk@fabiankeil.de>
Date: Tue, 12 Nov 2019 12:44:41 +0100
Subject: [PATCH] Fix an invalid free introduced in d01bb4028a9

---
 loaders.c  | 2 ++
 urlmatch.c | 9 ++++++---
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/loaders.c b/loaders.c
index 65aba0ac..1edf4277 100644
--- a/loaders.c
+++ b/loaders.c
@@ -998,6 +998,8 @@ void unload_forward_spec(struct forward_spec *fwd)
    free_pattern_spec(fwd->url);
    freez(fwd->gateway_host);
    freez(fwd->forward_host);
+   freez(fwd->auth_username);
+   freez(fwd->auth_password);
    free(fwd);
 
    return;
diff --git a/urlmatch.c b/urlmatch.c
index f1742c89..124cc6ec 100644
--- a/urlmatch.c
+++ b/urlmatch.c
@@ -1440,20 +1440,23 @@ jb_err parse_forwarder_address(char *address, char **hostname, int *port,
                                char **username, char **password)
 {
    char *p;
-   *hostname = strdup_or_die(address);
+   char *tmp;
+
+   tmp = *hostname = strdup_or_die(address);
 
    /* Parse username and password */
    if (username && password && (NULL != (p = strchr(*hostname, '@'))))
    {
       *p++ = '\0';
-      *username = *hostname;
-      *hostname = p;
+      *username = strdup_or_die(*hostname);
+      *hostname = strdup_or_die(p);
 
       if (NULL != (p = strchr(*username, ':')))
       {
          *p++ = '\0';
          *password = strdup_or_die(p);
       }
+      freez(tmp);
    }
 
    /* Parse hostname and port */
-- 
2.49.0