TextEditor: prevent crash on updating the completion model

Prevent updating the model with something other than a generic proposal
model.

Change-Id: I3880c1ce4ae7cf0aa4fb72d59b75a40db3f53482
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
David Schulz
2023-01-16 12:49:58 +01:00
parent d9de9db6f8
commit 41294e70b4
3 changed files with 9 additions and 4 deletions

View File

@@ -289,7 +289,12 @@ public:
{ {
if (!proposal) if (!proposal)
return; return;
updateModel(proposal->model(), prefix); if (proposal->id() != TextEditor::Constants::GENERIC_PROPOSAL_ID) {
// We received something else than a generic proposal so we cannot update the model
closeProposal();
return;
}
updateModel(proposal->model().staticCast<GenericProposalModel>(), prefix);
delete proposal; delete proposal;
} }

View File

@@ -392,12 +392,12 @@ void GenericProposalWidget::setIsSynchronized(bool isSync)
d->m_isSynchronized = isSync; d->m_isSynchronized = isSync;
} }
void GenericProposalWidget::updateModel(ProposalModelPtr model, const QString &prefix) void GenericProposalWidget::updateModel(GenericProposalModelPtr model, const QString &prefix)
{ {
QString currentText; QString currentText;
if (d->m_explicitlySelected) if (d->m_explicitlySelected)
currentText = d->m_model->text(d->m_completionListView->currentIndex().row()); currentText = d->m_model->text(d->m_completionListView->currentIndex().row());
d->m_model = model.staticCast<GenericProposalModel>(); d->m_model = model;
if (d->m_model->containsDuplicates()) if (d->m_model->containsDuplicates())
d->m_model->removeDuplicates(); d->m_model->removeDuplicates();
d->m_completionListView->setModel(new ModelAdapter(d->m_model, d->m_completionListView)); d->m_completionListView->setModel(new ModelAdapter(d->m_model, d->m_completionListView));

View File

@@ -31,7 +31,7 @@ public:
void setDisplayRect(const QRect &rect) override; void setDisplayRect(const QRect &rect) override;
void setIsSynchronized(bool isSync) override; void setIsSynchronized(bool isSync) override;
void updateModel(ProposalModelPtr model, const QString &prefix); void updateModel(GenericProposalModelPtr model, const QString &prefix);
void showProposal(const QString &prefix) override; void showProposal(const QString &prefix) override;
void filterProposal(const QString &prefix) override; void filterProposal(const QString &prefix) override;