mirror of
https://github.com/JGRennison/OpenTTD-patches.git
synced 2024-11-04 06:00:15 +00:00
(svn r19780) -Fix [FS#3807]: make sure that when checking whether a path + filename are valid the whole string can be constructed within an array of length MAX_PATH. If not, the name is too long and is deemed invalid
This commit is contained in:
parent
c03844c22a
commit
fb84d465ed
@ -92,17 +92,20 @@ bool FiosGetDiskFreeSpace(const char *path, uint64 *tot)
|
|||||||
bool FiosIsValidFile(const char *path, const struct dirent *ent, struct stat *sb)
|
bool FiosIsValidFile(const char *path, const struct dirent *ent, struct stat *sb)
|
||||||
{
|
{
|
||||||
char filename[MAX_PATH];
|
char filename[MAX_PATH];
|
||||||
|
int res;
|
||||||
#if defined(__MORPHOS__) || defined(__AMIGAOS__)
|
#if defined(__MORPHOS__) || defined(__AMIGAOS__)
|
||||||
/* On MorphOS or AmigaOS paths look like: "Volume:directory/subdirectory" */
|
/* On MorphOS or AmigaOS paths look like: "Volume:directory/subdirectory" */
|
||||||
if (FiosIsRoot(path)) {
|
if (FiosIsRoot(path)) {
|
||||||
snprintf(filename, lengthof(filename), "%s:%s", path, ent->d_name);
|
res = snprintf(filename, lengthof(filename), "%s:%s", path, ent->d_name);
|
||||||
} else // XXX - only next line!
|
} else // XXX - only next line!
|
||||||
#else
|
#else
|
||||||
assert(path[strlen(path) - 1] == PATHSEPCHAR);
|
assert(path[strlen(path) - 1] == PATHSEPCHAR);
|
||||||
if (strlen(path) > 2) assert(path[strlen(path) - 2] != PATHSEPCHAR);
|
if (strlen(path) > 2) assert(path[strlen(path) - 2] != PATHSEPCHAR);
|
||||||
#endif
|
#endif
|
||||||
snprintf(filename, lengthof(filename), "%s%s", path, ent->d_name);
|
res = snprintf(filename, lengthof(filename), "%s%s", path, ent->d_name);
|
||||||
|
|
||||||
|
/* Could we fully concatenate the path and filename? */
|
||||||
|
if (res >= (int)lengthof(filename) || res < 0) return false;
|
||||||
|
|
||||||
return stat(filename, sb) == 0;
|
return stat(filename, sb) == 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user