From 3dea3c360bbf97d3baa28c7f73c1ac6c831ce17a Mon Sep 17 00:00:00 2001 From: David Schulz Date: Tue, 17 Dec 2024 08:55:55 +0100 Subject: [PATCH] LanguageClient: check pointer before accessing it Add various pointerchecks in the client startup phase. Change-Id: Ic358634f14c56f1f26c57552ca4f89cc260daa77 Reviewed-by: Eike Ziller --- .../languageclient/languageclientmanager.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/plugins/languageclient/languageclientmanager.cpp b/src/plugins/languageclient/languageclientmanager.cpp index e2ed041fe78..6c690119f77 100644 --- a/src/plugins/languageclient/languageclientmanager.cpp +++ b/src/plugins/languageclient/languageclientmanager.cpp @@ -206,8 +206,8 @@ Client *LanguageClientManager::startClient(const BaseSettings *setting, QTC_ASSERT(setting, return nullptr); QTC_ASSERT(setting->isValid(), return nullptr); Client *client = setting->createClient(project); - qCDebug(Log) << "start client: " << client->name() << client; QTC_ASSERT(client, return nullptr); + qCDebug(Log) << "start client: " << client->name() << client; client->start(); managerInstance->m_clientsForSetting[setting->m_id].append(client); return client; @@ -326,16 +326,22 @@ void LanguageClientManager::applySettings(BaseSettings *setting) ensureClient(); for (TextEditor::TextDocument *previousDocument : std::as_const(documents)) { - if (setting->m_languageFilter.isSupported(previousDocument)) - openDocumentWithClient(previousDocument, ensureClient()); + if (setting->m_languageFilter.isSupported(previousDocument)) { + auto client = ensureClient(); + QTC_ASSERT(client, return); + openDocumentWithClient(previousDocument, client); + } } const QList &openedDocuments = Core::DocumentModel::openedDocuments(); for (Core::IDocument *document : openedDocuments) { if (documents.contains(document)) continue; // already handled above if (auto textDocument = qobject_cast(document)) { - if (setting->m_languageFilter.isSupported(document)) - ensureClient()->openDocument(textDocument); + if (setting->m_languageFilter.isSupported(document)) { + auto client = ensureClient(); + QTC_ASSERT(client, return); + client->openDocument(textDocument); + } } } } else if (setting->m_startBehavior == BaseSettings::RequiresProject) {