From a99f9c9341d3e9e5133fb76006c9be54af4cbace Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Sat, 13 Feb 2021 13:58:16 +0100 Subject: [PATCH] =?UTF-8?q?url-mode:=20activate=5Furl():=20ensure=20?= =?UTF-8?q?=E2=80=98scheme=E2=80=99,=20=E2=80=98host=E2=80=99=20and=20?= =?UTF-8?q?=E2=80=98path=E2=80=99=20are=20free:d?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit uri_parse() may succeed. But if the scheme isn’t “file”, or if the hostname isn’t localhost, then we failed to free ‘scheme’, ‘host’ and ‘path’. --- url-mode.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/url-mode.c b/url-mode.c index 57291e87..0733a457 100644 --- a/url-mode.c +++ b/url-mode.c @@ -42,20 +42,24 @@ activate_url(struct seat *seat, struct terminal *term, const struct url *url) char *scheme, *host, *path; if (uri_parse(url->url, strlen(url->url), &scheme, NULL, NULL, - &host, NULL, &path, NULL, NULL) && - strcmp(scheme, "file") == 0 && - hostname_is_localhost(host)) + &host, NULL, &path, NULL, NULL)) { - /* - * This is a file in *this* computer. Pass only the - * filename to the URL-launcher. - * - * I.e. strip the ‘file://user@host/’ prefix. - */ - url_string = path; + if (strcmp(scheme, "file") == 0 && hostname_is_localhost(host)) { + /* + * This is a file in *this* computer. Pass only the + * filename to the URL-launcher. + * + * I.e. strip the ‘file://user@host/’ prefix. + */ + url_string = path; + } else + free(path); + free(scheme); free(host); - } else + } + + if (url_string == NULL) url_string = xstrdup(url->url); switch (url->action) {