From 2cc705a154f9e59199f5b6abad353feb37e59bdd Mon Sep 17 00:00:00 2001 From: Jan Vaclav Date: Mon, 8 Jun 2026 13:05:33 +0200 Subject: [PATCH] libnm-sd-shared: reject urls containing control characters, quotes and backslashes --- src/libnm-systemd-shared/nm-sd-utils-shared.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/libnm-systemd-shared/nm-sd-utils-shared.c b/src/libnm-systemd-shared/nm-sd-utils-shared.c index dad21596cf..153c111f2f 100644 --- a/src/libnm-systemd-shared/nm-sd-utils-shared.c +++ b/src/libnm-systemd-shared/nm-sd-utils-shared.c @@ -52,6 +52,11 @@ nm_sd_dns_name_normalize(const char *s) } /*****************************************************************************/ +static gboolean +_http_url_is_invalid_char(char ch) +{ + return (guchar) ch >= 128u || (guchar) ch < 0x20 || NM_IN_SET(ch, '"', '\\'); +} static gboolean _http_url_is_valid(const char *url, gboolean only_https) @@ -69,7 +74,7 @@ _http_url_is_valid(const char *url, gboolean only_https) if (!url[0]) return FALSE; - return !NM_STRCHAR_ANY(url, ch, (guchar) ch >= 128u); + return !NM_STRCHAR_ANY(url, ch, _http_url_is_invalid_char(ch)); } gboolean @@ -82,12 +87,13 @@ nm_sd_http_url_is_valid_https(const char *url) * assert with http_url_is_valid() that the argument is valid. We thus must make * sure to only pass URLs that are valid according to http_url_is_valid(). * - * This is given, because our nm_sd_http_url_is_valid_https() is more strict - * than http_url_is_valid(). + * This is given, because our nm_sd_http_url_is_valid_https() is more restrictive + * than http_url_is_valid(). The assertion below checks that anything we accept, + * systemd must also accept. * * We only must make sure that this is also correct in the future, when we * re-import systemd code. */ - nm_assert(_http_url_is_valid(url, FALSE) == http_url_is_valid(url)); + nm_assert(!_http_url_is_valid(url, FALSE) || http_url_is_valid(url)); return _http_url_is_valid(url, TRUE); }