(vfs_url_split): Fix 2 memory leaks found by valgrind.

Signed-off-by: Andrew V. Samoilov <a.samoilov@gmail.com>
This commit is contained in:
Andrew V. Samoilov 2018-01-12 23:54:34 +02:00 committed by Andrew Borodin
parent 63d9fc6b0a
commit 35376105d4

View File

@ -236,7 +236,7 @@ vfs_url_split (const char *path, int default_port, vfs_url_flags_t flags)
char *pcopy; char *pcopy;
size_t pcopy_len; size_t pcopy_len;
const char *pend; const char *pend;
char *dir, *colon, *at, *rest; char *colon, *at, *rest;
path_element = g_new0 (vfs_path_element_t, 1); path_element = g_new0 (vfs_path_element_t, 1);
path_element->port = default_port; path_element->port = default_port;
@ -244,10 +244,11 @@ vfs_url_split (const char *path, int default_port, vfs_url_flags_t flags)
pcopy_len = strlen (path); pcopy_len = strlen (path);
pcopy = g_strndup (path, pcopy_len); pcopy = g_strndup (path, pcopy_len);
pend = pcopy + pcopy_len; pend = pcopy + pcopy_len;
dir = pcopy;
if ((flags & URL_NOSLASH) == 0) if ((flags & URL_NOSLASH) == 0)
{ {
char *dir = pcopy;
/* locate path component */ /* locate path component */
while (!IS_PATH_SEP (*dir) && *dir != '\0') while (!IS_PATH_SEP (*dir) && *dir != '\0')
dir++; dir++;
@ -289,8 +290,10 @@ vfs_url_split (const char *path, int default_port, vfs_url_flags_t flags)
} }
if ((flags & URL_USE_ANONYMOUS) == 0) if ((flags & URL_USE_ANONYMOUS) == 0)
{
g_free (path_element->user);
path_element->user = vfs_get_local_username (); path_element->user = vfs_get_local_username ();
}
/* Check if the host comes with a port spec, if so, chop it */ /* Check if the host comes with a port spec, if so, chop it */
if (*rest != '[') if (*rest != '[')
colon = strchr (rest, ':'); colon = strchr (rest, ':');
@ -306,6 +309,7 @@ vfs_url_split (const char *path, int default_port, vfs_url_flags_t flags)
else else
{ {
vfs_path_element_free (path_element); vfs_path_element_free (path_element);
g_free (pcopy);
return NULL; return NULL;
} }
} }
@ -337,6 +341,7 @@ vfs_url_split (const char *path, int default_port, vfs_url_flags_t flags)
} }
path_element->host = g_strdup (rest); path_element->host = g_strdup (rest);
g_free (pcopy);
#ifdef HAVE_CHARSET #ifdef HAVE_CHARSET
path_element->dir.converter = INVALID_CONV; path_element->dir.converter = INVALID_CONV;
#endif #endif