path-util: tighten path_is_valid() checks

This tightens the path_is_valid() checking: it now tests whether each
component in the path is bound by FILENAME_MAX in its size.
This commit is contained in:
Lennart Poettering
2021-02-03 23:36:55 +01:00
parent 0fb613000d
commit 2ef2376d83
2 changed files with 55 additions and 9 deletions
+19 -4
View File
@@ -891,7 +891,7 @@ bool filename_is_valid(const char *p) {
if (*e != 0)
return false;
if (e - p > FILENAME_MAX) /* FILENAME_MAX is counted *without* the trailing NUL byte */
if (e - p > NAME_MAX) /* NAME_MAX is counted *without* the trailing NUL byte */
return false;
return true;
@@ -902,10 +902,25 @@ bool path_is_valid(const char *p) {
if (isempty(p))
return false;
if (strlen(p) >= PATH_MAX) /* PATH_MAX is counted *with* the trailing NUL byte */
return false;
for (const char *e = p;;) {
size_t n;
return true;
/* Skip over slashes */
e += strspn(e, "/");
if (e - p >= PATH_MAX) /* Already reached the maximum length for a path? (PATH_MAX is counted
* *with* the trailing NUL byte) */
return false;
if (*e == 0) /* End of string? Yay! */
return true;
/* Skip over one component */
n = strcspn(e, "/");
if (n > NAME_MAX) /* One component larger than NAME_MAX? (NAME_MAX is counted *without* the
* trailing NUL byte) */
return false;
e += n;
}
}
bool path_is_normalized(const char *p) {