]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
url: recompose fix auth + missing auth, fixes #4767
authorJaroslav Kysela <perex@perex.cz>
Mon, 4 Dec 2017 21:52:46 +0000 (22:52 +0100)
committerJaroslav Kysela <perex@perex.cz>
Mon, 4 Dec 2017 21:52:46 +0000 (22:52 +0100)
src/url.c

index 74ba6e6532f2152b4c69f331547a56d95b382be8..aadbee1d02b4b5c814994d25b1fa93546cfe1d49 100644 (file)
--- a/src/url.c
+++ b/src/url.c
@@ -59,16 +59,14 @@ urlrecompose( url_t *url )
 {
   size_t len;
   char *raw, port[16];
+  const int auth = url->user && url->pass;
 
   len = (url->scheme ? strlen(url->scheme) : 0) + 4 +
-        (url->user && url->pass ?
-         ((url->user ? strlen(url->user) + 2 : 0) +
-          (url->pass ? strlen(url->pass) : 0)) : 0
-        ) +
+        (auth ? (strlen(url->user) + strlen(url->pass) + 2) : 0) +
         (url->host ? strlen(url->host) : 0) +
         (url->port > 0 ? 6 : 0) +
         (url->path ? strlen(url->path) : 0) +
-        (url->query ? strlen(url->query) : 0);
+        (url->query ? strlen(url->query) + 1 : 0);
   raw = malloc(len);
   if (raw == NULL)
     return -ENOMEM;
@@ -76,8 +74,12 @@ urlrecompose( url_t *url )
     snprintf(port, sizeof(port), ":%d", url->port);
   else
     port[0] = '\0';
-  snprintf(raw, len, "%s%s%s%s%s%s%s",
+  snprintf(raw, len, "%s%s%s%s%s%s%s%s%s%s%s",
            url->scheme ?: "", url->scheme ? "://" : "",
+           auth ? url->user : "",
+           auth ? ":" : "",
+           auth ? url->pass : "",
+           auth ? "@" : "",
            url->host ?: "", port,
            url->path ?: "",
            (url->query && url->query[0]) ? "?" : "",