diff options
author | Fred Baksik <frodak17@gmail.com> | 2019-04-22 15:01:24 (GMT) |
---|---|---|
committer | Fred Baksik <frodak17@gmail.com> | 2019-05-01 13:15:51 (GMT) |
commit | 6ad699358b6b421da6c49cf540b30eb8b0a3a996 (patch) | |
tree | 58ba9cddd24b581eca31fc130a5f7606c77abd78 /Source/cmakemain.cxx | |
parent | 955f7f41c08b90553fb4bcf364c12c072802d925 (diff) | |
download | CMake-6ad699358b6b421da6c49cf540b30eb8b0a3a996.zip CMake-6ad699358b6b421da6c49cf540b30eb8b0a3a996.tar.gz CMake-6ad699358b6b421da6c49cf540b30eb8b0a3a996.tar.bz2 |
cmake: --build -j <jobs> should not accept 0.
Fixes #19059
Diffstat (limited to 'Source/cmakemain.cxx')
-rw-r--r-- | Source/cmakemain.cxx | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/Source/cmakemain.cxx b/Source/cmakemain.cxx index d70c9d9..d96d956 100644 --- a/Source/cmakemain.cxx +++ b/Source/cmakemain.cxx @@ -24,6 +24,7 @@ #endif #include <cassert> +#include <climits> #include <ctype.h> #include <iostream> #include <string.h> @@ -69,7 +70,7 @@ static const char* cmDocumentationUsageNote[][2] = { " --config <cfg> = For multi-configuration tools, choose <cfg>.\n" \ " --clean-first = Build target 'clean' first, then build.\n" \ " (To clean only, use --target 'clean'.)\n" \ - " --verbose, -v = Enable verbose output - if supported - including\n" \ + " --verbose, -v = Enable verbose output - if supported - including\n" \ " the build commands to be executed. \n" \ " -- = Pass remaining options to the native tool.\n" @@ -393,7 +394,14 @@ int extract_job_number(int& index, char const* current, char const* next, if (jobString.empty()) { jobs = cmake::DEFAULT_BUILD_PARALLEL_LEVEL; } else if (cmSystemTools::StringToULong(jobString.c_str(), &numJobs)) { - jobs = int(numJobs); + if (numJobs == 0) { + std::cerr + << "The <jobs> value requires a positive integer argument.\n\n"; + } else if (numJobs > INT_MAX) { + std::cerr << "The <jobs> value is too large.\n\n"; + } else { + jobs = int(numJobs); + } } else { std::cerr << "'" << command.substr(0, len_of_flag) << "' invalid number '" << jobString << "' given.\n\n"; @@ -505,7 +513,17 @@ static int do_build(int ac, char const* const* av) } else { unsigned long numJobs = 0; if (cmSystemTools::StringToULong(parallel.c_str(), &numJobs)) { - jobs = int(numJobs); + if (numJobs == 0) { + std::cerr << "The CMAKE_BUILD_PARALLEL_LEVEL environment variable " + "requires a positive integer argument.\n\n"; + dir.clear(); + } else if (numJobs > INT_MAX) { + std::cerr << "The CMAKE_BUILD_PARALLEL_LEVEL environment variable " + "is too large.\n\n"; + dir.clear(); + } else { + jobs = int(numJobs); + } } else { std::cerr << "'CMAKE_BUILD_PARALLEL_LEVEL' environment variable\n" << "invalid number '" << parallel << "' given.\n\n"; |