summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2018-03-28 11:23:14 (GMT)
committerKitware Robot <kwrobot@kitware.com>2018-03-28 11:23:47 (GMT)
commit9dd7776cd9b34d2bcfa7740ebd4f23f09ed434ca (patch)
tree87626819e21b5b08e8d54dab566bbdb3097b6bc1 /Source
parentcf39c14f46d2e7fc1302a6ec026e3b0efafecf9b (diff)
parent27f033550a3693df67a30ce94f3c5e60a7a337ec (diff)
downloadCMake-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.h4
-rw-r--r--Source/cmSystemTools.cxx13
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.