From b1533a7f768c58dbc3f62246b64ce1329f53269c Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Sat, 31 Oct 2015 13:42:49 +0000 Subject: Stop utf8 conversion leaking its strings. --- utils/nsurl.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'utils') 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; } -- cgit v1.2.3