cmSystemTools: Fix ParseArguments out-of-bounds read

When checking for a Windows-style leading path, do not read past the
null terminator.

Issue: #17854
This commit is contained in:
Brad King
2018-03-27 08:18:47 -04:00
parent 6b9172d759
commit 75e8af3354
+7 -6
View File
@@ -550,12 +550,13 @@ std::vector<std::string> cmSystemTools::ParseArguments(const char* command)
bool win_path = false; bool win_path = false;
if ((command[0] != '/' && command[1] == ':' && command[2] == '\\') || if (command[0] && command[1] &&
(command[0] == '\"' && command[1] != '/' && command[2] == ':' && ((command[0] != '/' && command[1] == ':' && command[2] == '\\') ||
command[3] == '\\') || (command[0] == '\"' && command[1] != '/' && command[2] == ':' &&
(command[0] == '\'' && command[1] != '/' && command[2] == ':' && command[3] == '\\') ||
command[3] == '\\') || (command[0] == '\'' && command[1] != '/' && command[2] == ':' &&
(command[0] == '\\' && command[1] == '\\')) { command[3] == '\\') ||
(command[0] == '\\' && command[1] == '\\'))) {
win_path = true; win_path = true;
} }
// Split the command into an argv array. // Split the command into an argv array.