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:
+19
-4
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user