* src/dir.c (local_stat): [WINDOWS32] Fix buffer-overflow warning.

[SV 57888] Provide space for the path to use MAXPATHLEN plus nul.

Signed-off-by: Jens Rehsack <sno@netbsd.org>
Copyright-paperwork-exempt: yes
This commit is contained in:
Jens Rehsack 2020-02-24 10:52:21 +01:00 committed by Paul Smith
parent 1306023a4f
commit d3a53d5d16

View file

@ -1286,13 +1286,13 @@ local_stat (const char *path, struct stat *buf)
/* Make sure the parent of "." exists and is a directory, not a
file. This is because 'stat' on Windows normalizes the argument
foo/. => foo without checking first that foo is a directory. */
if (plen > 1 && path[plen - 1] == '.'
if (plen > 2 && path[plen - 1] == '.'
&& (path[plen - 2] == '/' || path[plen - 2] == '\\'))
{
char parent[MAXPATHLEN];
char parent[MAXPATHLEN+1];
strncpy (parent, path, plen - 2);
parent[plen - 2] = '\0';
strncpy (parent, path, MAXPATHLEN);
parent[MIN(plen - 2, MAXPATHLEN)] = '\0';
if (stat (parent, buf) < 0 || !_S_ISDIR (buf->st_mode))
return -1;
}