diff options
author | Brad King <brad.king@kitware.com> | 2018-03-28 11:23:14 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2018-03-28 11:23:47 (GMT) |
commit | 9dd7776cd9b34d2bcfa7740ebd4f23f09ed434ca (patch) | |
tree | 87626819e21b5b08e8d54dab566bbdb3097b6bc1 /Source | |
parent | cf39c14f46d2e7fc1302a6ec026e3b0efafecf9b (diff) | |
parent | 27f033550a3693df67a30ce94f3c5e60a7a337ec (diff) | |
download | CMake-9dd7776cd9b34d2bcfa7740ebd4f23f09ed434ca.zip CMake-9dd7776cd9b34d2bcfa7740ebd4f23f09ed434ca.tar.gz CMake-9dd7776cd9b34d2bcfa7740ebd4f23f09ed434ca.tar.bz2 |
Merge topic 'ctest_update-memory-problems'
27f033550a ctest_update: Fix crash when handling svn externals
75e8af3354 cmSystemTools: Fix ParseArguments out-of-bounds read
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1893
Diffstat (limited to 'Source')
-rw-r--r-- | Source/CTest/cmCTestSVN.h | 4 | ||||
-rw-r--r-- | Source/cmSystemTools.cxx | 13 |
2 files changed, 10 insertions, 7 deletions
diff --git a/Source/CTest/cmCTestSVN.h b/Source/CTest/cmCTestSVN.h index dbc7fde..a467ede 100644 --- a/Source/CTest/cmCTestSVN.h +++ b/Source/CTest/cmCTestSVN.h @@ -8,6 +8,7 @@ #include "cmCTestGlobalVC.h" #include <iosfwd> +#include <list> #include <string> #include <vector> @@ -70,7 +71,8 @@ private: friend struct Revision; // Info of all the repositories (root, externals and nested ones). - std::vector<SVNInfo> Repositories; + // Use std::list so the elements don't move in memory. + std::list<SVNInfo> Repositories; // Pointer to the infos of the root repository. SVNInfo* RootInfo; diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx index 88cfe81..eeb73c3 100644 --- a/Source/cmSystemTools.cxx +++ b/Source/cmSystemTools.cxx @@ -550,12 +550,13 @@ std::vector<std::string> cmSystemTools::ParseArguments(const char* command) bool win_path = false; - if ((command[0] != '/' && command[1] == ':' && command[2] == '\\') || - (command[0] == '\"' && command[1] != '/' && command[2] == ':' && - command[3] == '\\') || - (command[0] == '\'' && command[1] != '/' && command[2] == ':' && - command[3] == '\\') || - (command[0] == '\\' && command[1] == '\\')) { + 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[3] == '\\') || + (command[0] == '\\' && command[1] == '\\'))) { win_path = true; } // Split the command into an argv array. |