diff options
Diffstat (limited to 'src/shared')
-rw-r--r-- | src/shared/util.c | 42 | ||||
-rw-r--r-- | src/shared/util.h | 3 |
2 files changed, 32 insertions, 13 deletions
diff --git a/src/shared/util.c b/src/shared/util.c index fd54023660..5157b94a34 100644 --- a/src/shared/util.c +++ b/src/shared/util.c @@ -5458,25 +5458,43 @@ int getenv_for_pid(pid_t pid, const char *field, char **_value) { return r; } -bool is_valid_documentation_url(const char *url) { - assert(url); +bool http_url_is_valid(const char *url) { + const char *p; - if (startswith(url, "http://") && url[7]) - return true; + if (isempty(url)) + return false; - if (startswith(url, "https://") && url[8]) - return true; + p = startswith(url, "http://"); + if (!p) + p = startswith(url, "https://"); + if (!p) + return false; - if (startswith(url, "file:") && url[5]) - return true; + if (isempty(p)) + return false; - if (startswith(url, "info:") && url[5]) - return true; + return ascii_is_valid(p); +} - if (startswith(url, "man:") && url[4]) +bool documentation_url_is_valid(const char *url) { + const char *p; + + if (isempty(url)) + return false; + + if (http_url_is_valid(url)) return true; - return false; + p = startswith(url, "file:/"); + if (!p) + p = startswith(url, "info:"); + if (!p) + p = startswith(url, "man:"); + + if (isempty(p)) + return false; + + return ascii_is_valid(p); } bool in_initrd(void) { diff --git a/src/shared/util.h b/src/shared/util.h index 2e662c9d2d..d40c0b0378 100644 --- a/src/shared/util.h +++ b/src/shared/util.h @@ -651,7 +651,8 @@ int setrlimit_closest(int resource, const struct rlimit *rlim); int getenv_for_pid(pid_t pid, const char *field, char **_value); -bool is_valid_documentation_url(const char *url) _pure_; +bool http_url_is_valid(const char *url) _pure_; +bool documentation_url_is_valid(const char *url) _pure_; bool in_initrd(void); |