KWSys: Fix SystemTools::FileIsDirectory with long paths (#14176)

Allocate a buffer large enough to hold the input path when removing a
trailing slash.  Use a local stack buffer when it is large enough and
fall back to heap allocation otherwise.
This commit is contained in:
Brad King 2013-05-28 11:12:18 -04:00
parent 5dd8c01429
commit 045d6ae0b0
1 changed files with 13 additions and 4 deletions

View File

@ -2742,14 +2742,23 @@ bool SystemTools::FileIsDirectory(const char* name)
} }
// Remove any trailing slash from the name. // Remove any trailing slash from the name.
char buffer[KWSYS_SYSTEMTOOLS_MAXPATH]; char local_buffer[KWSYS_SYSTEMTOOLS_MAXPATH];
std::string string_buffer;
size_t last = length-1; size_t last = length-1;
if(last > 0 && (name[last] == '/' || name[last] == '\\') if(last > 0 && (name[last] == '/' || name[last] == '\\')
&& strcmp(name, "/") !=0) && strcmp(name, "/") !=0)
{ {
memcpy(buffer, name, last); if(last < sizeof(local_buffer))
buffer[last] = 0; {
name = buffer; memcpy(local_buffer, name, last);
local_buffer[last] = 0;
name = local_buffer;
}
else
{
string_buffer.append(name, last);
name = string_buffer.c_str();
}
} }
// Now check the file node type. // Now check the file node type.