ClangCodeModel: fix null pointer access

Change-Id: I2c9e4dc04b7b27986eb0a3a74d8fa6879715df87
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
David Schulz
2022-10-19 09:48:43 +02:00
committed by Christian Kandeler
parent 14938b3881
commit 938e9cab0f
2 changed files with 14 additions and 5 deletions

View File

@@ -427,9 +427,15 @@ static bool isProjectDataUpToDate(
return false; return false;
if (sessionModeEnabled() && project) if (sessionModeEnabled() && project)
return false; return false;
const ProjectInfoList newProjectInfo = project ProjectInfoList newProjectInfo;
? ProjectInfoList{CppModelManager::instance()->projectInfo(project)} if (project) {
: CppModelManager::instance()->projectInfos(); if (const ProjectInfo::ConstPtr pi = CppModelManager::instance()->projectInfo(project))
newProjectInfo.append(pi);
else
return false;
} else {
newProjectInfo = CppModelManager::instance()->projectInfos();
}
if (newProjectInfo.size() != projectInfo.size()) if (newProjectInfo.size() != projectInfo.size())
return false; return false;
for (int i = 0; i < projectInfo.size(); ++i) { for (int i = 0; i < projectInfo.size(); ++i) {
@@ -450,8 +456,10 @@ void ClangModelManagerSupport::updateLanguageClient(ProjectExplorer::Project *pr
if (sessionModeEnabled()) { if (sessionModeEnabled()) {
project = nullptr; project = nullptr;
projectInfo = CppModelManager::instance()->projectInfos(); projectInfo = CppModelManager::instance()->projectInfos();
} else if (const ProjectInfo::ConstPtr pi = CppModelManager::instance()->projectInfo(project)) {
projectInfo.append(pi);
} else { } else {
projectInfo.append(CppModelManager::instance()->projectInfo(project)); return;
} }
const Utils::FilePath jsonDbDir = getJsonDbDir(project); const Utils::FilePath jsonDbDir = getJsonDbDir(project);

View File

@@ -166,8 +166,9 @@ GenerateCompilationDbResult generateCompilationDB(QList<ProjectInfo::ConstPtr> p
const UsePrecompiledHeaders usePch = getPchUsage(); const UsePrecompiledHeaders usePch = getPchUsage();
const QJsonArray jsonProjectOptions = QJsonArray::fromStringList(projectOptions); const QJsonArray jsonProjectOptions = QJsonArray::fromStringList(projectOptions);
for (const ProjectInfo::ConstPtr &projectInfo : std::as_const(projectInfoList)) { for (const ProjectInfo::ConstPtr &projectInfo : std::as_const(projectInfoList)) {
QTC_ASSERT(projectInfo, continue);
for (ProjectPart::ConstPtr projectPart : projectInfo->projectParts()) { for (ProjectPart::ConstPtr projectPart : projectInfo->projectParts()) {
QTC_ASSERT(projectInfo, continue); QTC_ASSERT(projectPart, continue);
QStringList args; QStringList args;
const CompilerOptionsBuilder optionsBuilder = clangOptionsBuilder( const CompilerOptionsBuilder optionsBuilder = clangOptionsBuilder(
*projectPart, warningsConfig, clangIncludeDir, {}); *projectPart, warningsConfig, clangIncludeDir, {});