From: Lennart Poettering Date: Wed, 17 Oct 2018 16:28:14 +0000 (+0200) Subject: path-util: add new path_is_valid() helper X-Git-Tag: v240~527^2~4 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=656552ebb354447531dc4a293c6a3da75757eb58;p=thirdparty%2Fsystemd.git path-util: add new path_is_valid() helper --- diff --git a/src/basic/path-util.c b/src/basic/path-util.c index f60cf003e75..2deb176240e 100644 --- a/src/basic/path-util.c +++ b/src/basic/path-util.c @@ -779,24 +779,32 @@ bool filename_is_valid(const char *p) { if (*e != 0) return false; - if (e - p > FILENAME_MAX) + if (e - p > FILENAME_MAX) /* FILENAME_MAX is counted *without* the trailing NUL byte */ return false; return true; } -bool path_is_normalized(const char *p) { +bool path_is_valid(const char *p) { if (isempty(p)) return false; - if (dot_or_dot_dot(p)) + if (strlen(p) >= PATH_MAX) /* PATH_MAX is counted *with* the trailing NUL byte */ return false; - if (startswith(p, "../") || endswith(p, "/..") || strstr(p, "/../")) + return true; +} + +bool path_is_normalized(const char *p) { + + if (!path_is_valid(p)) + return false; + + if (dot_or_dot_dot(p)) return false; - if (strlen(p)+1 > PATH_MAX) + if (startswith(p, "../") || endswith(p, "/..") || strstr(p, "/../")) return false; if (startswith(p, "./") || endswith(p, "/.") || strstr(p, "/./")) diff --git a/src/basic/path-util.h b/src/basic/path-util.h index 49604eab800..17d31bbd89b 100644 --- a/src/basic/path-util.h +++ b/src/basic/path-util.h @@ -134,6 +134,7 @@ char* dirname_malloc(const char *path); const char *last_path_component(const char *path); bool filename_is_valid(const char *p) _pure_; +bool path_is_valid(const char *p) _pure_; bool path_is_normalized(const char *p) _pure_; char *file_in_same_dir(const char *path, const char *filename);