Update type for Settings::checksMaxTime. (#5205)

It's a time offset not a size. It should not have value SIZE_MAX that
makes it ineffective (overflow in calculation of stop time).
This commit is contained in:
Daniel Marjamäki 2023-06-28 19:52:33 +02:00 committed by GitHub
parent 767c0fb337
commit 55af68aaf7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 6 additions and 7 deletions

View File

@ -263,7 +263,7 @@ bool CmdLineParser::parseFromArgs(int argc, const char* const argv[])
} }
else if (std::strncmp(argv[i], "--checks-max-time=", 18) == 0) { else if (std::strncmp(argv[i], "--checks-max-time=", 18) == 0) {
if (!parseNumberArg(argv[i], 18, mSettings.checksMaxTime)) if (!parseNumberArg(argv[i], 18, mSettings.checksMaxTime, true))
return false; return false;
} }

View File

@ -123,9 +123,8 @@ protected:
private: private:
bool isCppcheckPremium() const; bool isCppcheckPremium() const;
// TODO: get rid of is_signed
template<typename T> template<typename T>
static bool parseNumberArg(const char* const arg, std::size_t offset, T& num, bool is_signed = false) static bool parseNumberArg(const char* const arg, std::size_t offset, T& num, bool mustBePositive = false)
{ {
T tmp; T tmp;
std::string err; std::string err;
@ -133,7 +132,7 @@ private:
printError("argument to '" + std::string(arg, offset) + "' is not valid - " + err + "."); printError("argument to '" + std::string(arg, offset) + "' is not valid - " + err + ".");
return false; return false;
} }
if (is_signed && tmp < 0) { if (mustBePositive && tmp < 0) {
printError("argument to '" + std::string(arg, offset) + "' needs to be a positive integer."); printError("argument to '" + std::string(arg, offset) + "' needs to be a positive integer.");
return false; return false;
} }

View File

@ -128,7 +128,7 @@ public:
bool checkLibrary; bool checkLibrary;
/** @brief The maximum time in seconds for the checks of a single file */ /** @brief The maximum time in seconds for the checks of a single file */
std::size_t checksMaxTime; int checksMaxTime;
/** @brief check unknown function return values */ /** @brief check unknown function return values */
std::set<std::string> checkUnknownFunctionReturn; std::set<std::string> checkUnknownFunctionReturn;

View File

@ -1684,7 +1684,7 @@ private:
void checksMaxTime() { void checksMaxTime() {
REDIRECT; REDIRECT;
const char * const argv[] = {"cppcheck", "--checks-max-time=12", "file.cpp"}; const char * const argv[] = {"cppcheck", "--checks-max-time=12", "file.cpp"};
settings.checksMaxTime = SIZE_MAX; settings.checksMaxTime = 0;
ASSERT(defParser.parseFromArgs(3, argv)); ASSERT(defParser.parseFromArgs(3, argv));
ASSERT_EQUALS(12, settings.checksMaxTime); ASSERT_EQUALS(12, settings.checksMaxTime);
ASSERT_EQUALS("", GET_REDIRECT_OUTPUT); ASSERT_EQUALS("", GET_REDIRECT_OUTPUT);
@ -1694,7 +1694,7 @@ private:
REDIRECT; REDIRECT;
const char * const argv[] = {"cppcheck", "--checks-max-time=-1", "file.cpp"}; const char * const argv[] = {"cppcheck", "--checks-max-time=-1", "file.cpp"};
ASSERT(!defParser.parseFromArgs(3, argv)); ASSERT(!defParser.parseFromArgs(3, argv));
ASSERT_EQUALS("cppcheck: error: argument to '--checks-max-time=' is not valid - needs to be positive.\n", GET_REDIRECT_OUTPUT); ASSERT_EQUALS("cppcheck: error: argument to '--checks-max-time=' needs to be a positive integer.\n", GET_REDIRECT_OUTPUT);
} }
void checksMaxTimeInvalid() { void checksMaxTimeInvalid() {