From cbc9c6f0cccbe605b63348210a995ec321ea5cf1 Mon Sep 17 00:00:00 2001 From: Julien Wadel Date: Thu, 14 Oct 2021 15:16:38 +0200 Subject: [PATCH] Fix crash on endResetModel while searching a sip address (spotted on Qt 5.15.2). --- .../components/search/SearchSipAddressesModel.cpp | 15 ++++++++++++--- .../search/SearchSipAddressesProxyModel.cpp | 6 ++++-- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/linphone-app/src/components/search/SearchSipAddressesModel.cpp b/linphone-app/src/components/search/SearchSipAddressesModel.cpp index 48d3295cf..7d0319ce5 100644 --- a/linphone-app/src/components/search/SearchSipAddressesModel.cpp +++ b/linphone-app/src/components/search/SearchSipAddressesModel.cpp @@ -114,7 +114,16 @@ void SearchSipAddressesModel::searchReceived(std::list > addresses; for(auto it = results.begin() ; it != results.end() ; ++it) addresses << std::make_shared((*it)->getFriend(), (*it)->getAddress()); - beginResetModel(); - mAddresses = addresses; - endResetModel(); +// Fix crash on Qt 5.15.2 with endResetModel (index out of range). + if(mAddresses.size() > 0){// Workaround : remove all + beginRemoveRows(QModelIndex(), 0, mAddresses.size()-1); + mAddresses.clear(); + endRemoveRows(); + } + if( addresses.size() > 0){// Workaround : add new on cleanned base + beginInsertRows(QModelIndex(),0, addresses.size()-1); + mAddresses = addresses; + endInsertRows(); + } +//-------------------------------------------------------------- } diff --git a/linphone-app/src/components/search/SearchSipAddressesProxyModel.cpp b/linphone-app/src/components/search/SearchSipAddressesProxyModel.cpp index 4088e03e5..96359c8a5 100644 --- a/linphone-app/src/components/search/SearchSipAddressesProxyModel.cpp +++ b/linphone-app/src/components/search/SearchSipAddressesProxyModel.cpp @@ -73,8 +73,10 @@ bool SearchSipAddressesProxyModel::isIgnored(const QString& address) const{ bool SearchSipAddressesProxyModel::filterAcceptsRow (int sourceRow, const QModelIndex &sourceParent) const { const QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent); const SearchResultModel * model = sourceModel()->data(index).value(); - - return !mResultsToIgnore.contains(Utils::coreStringToAppString(model->getAddress()->asStringUriOnly())); + if(!model) + return false; + else + return !mResultsToIgnore.contains(Utils::coreStringToAppString(model->getAddress()->asStringUriOnly())); } bool SearchSipAddressesProxyModel::lessThan (const QModelIndex &left, const QModelIndex &right) const {