{
g_auto(GStrv) str_arr = g_strsplit(url, "@", 2);
g_auto(GStrv) str_arr2 = g_strsplit(str_arr[0], ":", 0);
+ g_autofree gchar *password = NULL;
- if (g_strv_length(str_arr2) > 3) /* NOTE: assume id has ':' character */
+ if (g_strv_length(str_arr2) > 3) { /* NOTE: assume id has ':' character */
+ password = g_uri_escape_string(str_arr2[3], NULL, FALSE);
return g_strdup_printf("%s:%s%s%s:%s@%s",
- str_arr2[0], str_arr2[1], "%3A", str_arr2[2], str_arr2[3], str_arr[1]);
+ str_arr2[0], str_arr2[1], "%3A", str_arr2[2], password, str_arr[1]);
+ }
- return g_strdup(url);
+ password = g_uri_escape_string(str_arr2[2], NULL, FALSE);
+ return g_strdup_printf("%s:%s:%s@%s",
+ str_arr2[0], str_arr2[1], password, str_arr[1]);
}
/* Use g_free() to release the return value. */