From ed981ef0b7f6988e205ad540bc82581b9f0a7f0b Mon Sep 17 00:00:00 2001 From: Bill Hoffman Date: Thu, 18 May 2006 23:24:00 -0400 Subject: ENH: fix crashes when command line arguments are not followed by the correct number of arguments --- Source/cmake.cxx | 35 ++++++++++++++++++++++++++++++++--- Source/cmakemain.cxx | 11 +++++++---- 2 files changed, 39 insertions(+), 7 deletions(-) diff --git a/Source/cmake.cxx b/Source/cmake.cxx index 84ecc0f..f037fc3 100644 --- a/Source/cmake.cxx +++ b/Source/cmake.cxx @@ -267,7 +267,16 @@ bool cmake::SetCacheArgs(const std::vector& args) std::string entry = arg.substr(2); if(entry.size() == 0) { - entry = args[++i]; + ++i; + if(i < args.size()) + { + entry = args[i]; + } + else + { + cmSystemTools::Error("-D must be followed with VAR=VALUE."); + return false; + } } std::string var, value; cmCacheManager::CacheEntryType type = cmCacheManager::UNINITIALIZED; @@ -291,7 +300,16 @@ bool cmake::SetCacheArgs(const std::vector& args) std::string path = arg.substr(2); if ( path.size() == 0 ) { - path = args[++i]; + ++i; + if(i < args.size()) + { + path = args[i]; + } + else + { + cmSystemTools::Error("-C must be followed by a file name."); + return false; + } } std::cerr << "loading initial cache file " << path.c_str() << "\n"; this->ReadListFile(path.c_str()); @@ -299,6 +317,11 @@ bool cmake::SetCacheArgs(const std::vector& args) else if(arg.find("-P",0) == 0) { i++; + if(i >= args.size()) + { + cmSystemTools::Error("-P must be followed by a file name."); + return false; + } std::string path = args[i]; if ( path.size() == 0 ) { @@ -425,7 +448,13 @@ void cmake::SetArgs(const std::vector& args) std::string value = arg.substr(2); if(value.size() == 0) { - value = args[++i]; + ++i; + if(i >= args.size()) + { + cmSystemTools::Error("No generator specified for -G"); + return; + } + value = args[i]; } cmGlobalGenerator* gen = this->CreateGlobalGenerator(value.c_str()); diff --git a/Source/cmakemain.cxx b/Source/cmakemain.cxx index bb01116..3da5a06 100644 --- a/Source/cmakemain.cxx +++ b/Source/cmakemain.cxx @@ -236,10 +236,13 @@ int do_cmake(int ac, char** av) { cmSystemTools::Error("No script specified for argument -P"); } - script_mode = true; - args.push_back(av[i]); - i++; - args.push_back(av[i]); + else + { + script_mode = true; + args.push_back(av[i]); + i++; + args.push_back(av[i]); + } } else { -- cgit v0.12