summaryrefslogtreecommitdiff
path: root/src/shared/util.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/shared/util.c')
-rw-r--r--src/shared/util.c42
1 files changed, 30 insertions, 12 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) {