CppCheckExecutor: do not modify settings after they were passed to `CppCheck` (#5697)

This commit is contained in:
Oliver Stöneberg 2023-11-25 22:07:49 +01:00 committed by GitHub
parent 8e1ae7e412
commit 1d3f9beb21
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 14 additions and 12 deletions

View File

@ -183,10 +183,13 @@ int CppCheckExecutor::check(int argc, const char* const argv[])
return EXIT_SUCCESS;
}
settings.loadSummaries();
mFiles = parser.getFiles();
mFileSettings = parser.getFileSettings();
mStdLogger = new StdLogger(settings);
CppCheck cppCheck(*mStdLogger, true, executeCommand);
cppCheck.settings() = settings;
@ -230,9 +233,10 @@ bool CppCheckExecutor::reportSuppressions(const Settings &settings, bool unusedF
/*
* That is a method which gets called from check_wrapper
* */
int CppCheckExecutor::check_internal(CppCheck& cppcheck)
int CppCheckExecutor::check_internal(CppCheck& cppcheck) const
{
Settings& settings = cppcheck.settings();
const auto& settings = cppcheck.settings();
auto& suppressions = cppcheck.settings().nomsg;
if (settings.reportProgress >= 0)
mStdLogger->resetLatestProgressOutputTime();
@ -242,8 +246,6 @@ int CppCheckExecutor::check_internal(CppCheck& cppcheck)
}
if (!settings.buildDir.empty()) {
settings.loadSummaries();
std::list<std::string> fileNames;
for (std::list<std::pair<std::string, std::size_t>>::const_iterator i = mFiles.cbegin(); i != mFiles.cend(); ++i)
fileNames.emplace_back(i->first);
@ -256,13 +258,13 @@ int CppCheckExecutor::check_internal(CppCheck& cppcheck)
unsigned int returnValue;
if (settings.useSingleJob()) {
// Single process
SingleExecutor executor(cppcheck, mFiles, mFileSettings, settings, settings.nomsg, *mStdLogger);
SingleExecutor executor(cppcheck, mFiles, mFileSettings, settings, suppressions, *mStdLogger);
returnValue = executor.check();
} else {
#if defined(THREADING_MODEL_THREAD)
ThreadExecutor executor(mFiles, mFileSettings, settings, settings.nomsg, *mStdLogger, CppCheckExecutor::executeCommand);
ThreadExecutor executor(mFiles, mFileSettings, settings, suppressions, *mStdLogger, CppCheckExecutor::executeCommand);
#elif defined(THREADING_MODEL_FORK)
ProcessExecutor executor(mFiles, mFileSettings, settings, settings.nomsg, *mStdLogger, CppCheckExecutor::executeCommand);
ProcessExecutor executor(mFiles, mFileSettings, settings, suppressions, *mStdLogger, CppCheckExecutor::executeCommand);
#endif
returnValue = executor.check();
}

View File

@ -101,7 +101,7 @@ protected:
* given value is returned instead of default 0.
* If no errors are found, 0 is returned.
*/
int check_internal(CppCheck& cppcheck);
int check_internal(CppCheck& cppcheck) const;
/**
* Filename associated with size of file

View File

@ -253,7 +253,7 @@ namespace {
* TODO Check for multi-threading issues!
*
*/
int check_wrapper_seh(CppCheckExecutor& executor, int (CppCheckExecutor::*f)(CppCheck&), CppCheck& cppcheck)
int check_wrapper_seh(CppCheckExecutor& executor, int (CppCheckExecutor::*f)(CppCheck&) const, CppCheck& cppcheck)
{
FILE *outputFile = CppCheckExecutor::getExceptionOutput();
__try {

View File

@ -26,7 +26,7 @@
class CppCheckExecutor;
class CppCheck;
int check_wrapper_seh(CppCheckExecutor& executor, int (CppCheckExecutor::*f)(CppCheck&), CppCheck& cppcheck);
int check_wrapper_seh(CppCheckExecutor& executor, int (CppCheckExecutor::*f)(CppCheck&) const, CppCheck& cppcheck);
#endif

View File

@ -298,7 +298,7 @@ static void CppcheckSignalHandler(int signo, siginfo_t * info, void * context)
}
}
int check_wrapper_sig(CppCheckExecutor& executor, int (CppCheckExecutor::*f)(CppCheck&), CppCheck& cppcheck)
int check_wrapper_sig(CppCheckExecutor& executor, int (CppCheckExecutor::*f)(CppCheck&) const, CppCheck& cppcheck)
{
// determine stack vs. heap
char stackVariable;

View File

@ -26,7 +26,7 @@
class CppCheckExecutor;
class CppCheck;
int check_wrapper_sig(CppCheckExecutor& executor, int (CppCheckExecutor::*f)(CppCheck&), CppCheck& cppcheck);
int check_wrapper_sig(CppCheckExecutor& executor, int (CppCheckExecutor::*f)(CppCheck&) const, CppCheck& cppcheck);
#endif // CPPCHECKEXECUTORSIG_H