summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2015-10-31 13:42:49 +0000
committerMichael Drake <tlsa@netsurf-browser.org>2015-10-31 13:44:14 +0000
commitb1533a7f768c58dbc3f62246b64ce1329f53269c (patch)
tree1b4e9a3083086ee2d01e74f16948b68d9b14dd88 /utils
parent67cbdf6befb0be2285b367bcd66e0b5f61c9fa55 (diff)
downloadnetsurf-b1533a7f768c58dbc3f62246b64ce1329f53269c.tar.gz
netsurf-b1533a7f768c58dbc3f62246b64ce1329f53269c.tar.bz2
Stop utf8 conversion leaking its strings.
Diffstat (limited to 'utils')
-rw-r--r--utils/nsurl.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/utils/nsurl.c b/utils/nsurl.c
index 1aa4c6037..a8030f3a3 100644
--- a/utils/nsurl.c
+++ b/utils/nsurl.c
@@ -1704,11 +1704,11 @@ nserror nsurl_get_utf8(const nsurl *url, char **url_s, size_t *url_l)
{
nserror err;
lwc_string *host;
- char *idna_host;
+ char *idna_host = NULL;
size_t idna_host_len;
- char *scheme;
+ char *scheme = NULL;
size_t scheme_len;
- char *path;
+ char *path = NULL;
size_t path_len;
assert(url != NULL);
@@ -1721,33 +1721,41 @@ nserror nsurl_get_utf8(const nsurl *url, char **url_s, size_t *url_l)
err = idna_decode(lwc_string_data(host), lwc_string_length(host),
&idna_host, &idna_host_len);
if (err != NSERROR_OK) {
- return err;
+ goto cleanup;
}
err = nsurl_get(url,
NSURL_SCHEME | NSURL_CREDENTIALS,
&scheme, &scheme_len);
if (err != NSERROR_OK) {
- return err;
+ goto cleanup;
}
err = nsurl_get(url,
NSURL_PORT | NSURL_PATH | NSURL_QUERY | NSURL_FRAGMENT,
&path, &path_len);
if (err != NSERROR_OK) {
- return err;
+ goto cleanup;
}
*url_l = scheme_len + idna_host_len + path_len + 1; /* +1 for \0 */
*url_s = malloc(*url_l);
if (*url_s == NULL) {
- return NSERROR_NOMEM;
+ err = NSERROR_NOMEM;
+ goto cleanup;
}
snprintf(*url_s, *url_l, "%s%s%s", scheme, idna_host, path);
- return NSERROR_OK;
+ err = NSERROR_OK;
+
+cleanup:
+ free(idna_host);
+ free(scheme);
+ free(path);
+
+ return err;
}