Fix crash for unknown QQmlListModel roles in debug builds
If a role is unknown, trying to access it will crash in getExistingRole. Fixed that and now return QVariant() for unknown roles. Change-Id: Iad5c1292a4faee893fbc5a69984cf776aca85d70 Reviewed-by: Shawn Rutledge <shawn.rutledge@theqtcompany.com> Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
This commit is contained in:
parent
e7da97bf71
commit
82b0b31fe4
|
@ -392,6 +392,8 @@ void ListModel::updateCacheIndices()
|
|||
|
||||
QVariant ListModel::getProperty(int elementIndex, int roleIndex, const QQmlListModel *owner, QV4::ExecutionEngine *eng)
|
||||
{
|
||||
if (roleIndex >= m_layout->roleCount())
|
||||
return QVariant();
|
||||
ListElement *e = elements[elementIndex];
|
||||
const ListLayout::Role &r = m_layout->getExistingRole(roleIndex);
|
||||
return e->getProperty(r, owner, eng);
|
||||
|
|
|
@ -110,6 +110,7 @@ private slots:
|
|||
void get_nested();
|
||||
void get_nested_data();
|
||||
void crash_model_with_multiple_roles();
|
||||
void crash_model_with_unknown_roles();
|
||||
void set_model_cache();
|
||||
void property_changes();
|
||||
void property_changes_data();
|
||||
|
@ -968,6 +969,21 @@ void tst_qqmllistmodel::crash_model_with_multiple_roles()
|
|||
delete rootItem;
|
||||
}
|
||||
|
||||
void tst_qqmllistmodel::crash_model_with_unknown_roles()
|
||||
{
|
||||
QQmlEngine eng;
|
||||
QQmlComponent component(&eng, testFileUrl("multipleroles.qml"));
|
||||
QScopedPointer<QObject> rootItem(component.create());
|
||||
QVERIFY(component.errorString().isEmpty());
|
||||
QVERIFY(rootItem != 0);
|
||||
QQmlListModel *model = rootItem->findChild<QQmlListModel*>("listModel");
|
||||
QVERIFY(model != 0);
|
||||
|
||||
// used to cause a crash in debug builds
|
||||
model->index(0, 0, QModelIndex()).data(Qt::DisplayRole);
|
||||
model->index(0, 0, QModelIndex()).data(Qt::UserRole);
|
||||
}
|
||||
|
||||
//QTBUG-15190
|
||||
void tst_qqmllistmodel::set_model_cache()
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue