tst_QSortFilterProxyModel: fix mem-leaks
tst_QSortFilterProxyModel::doubleProxySelectionSetSourceModel() leaked _everything_, driving asan nuts. Allocate objects on the stack instead; now it's asan-clean. Change-Id: I721e797e02b1daec9e2b5e3d4ef612a42b2e3492 Reviewed-by: Ivan Solovev <ivan.solovev@qt.io> (cherry picked from commit 9f8449a054a165ae560c91d3e31409bc293df80d) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
44949ea13e
commit
ce7a1aa628
@ -3235,36 +3235,36 @@ void tst_QSortFilterProxyModel::removeRowsRecursive()
|
|||||||
|
|
||||||
void tst_QSortFilterProxyModel::doubleProxySelectionSetSourceModel()
|
void tst_QSortFilterProxyModel::doubleProxySelectionSetSourceModel()
|
||||||
{
|
{
|
||||||
QStandardItemModel *model1 = new QStandardItemModel;
|
QStandardItemModel model1;
|
||||||
QStandardItem *parentItem = model1->invisibleRootItem();
|
QStandardItem *parentItem = model1.invisibleRootItem();
|
||||||
for (int i = 0; i < 4; ++i) {
|
for (int i = 0; i < 4; ++i) {
|
||||||
QStandardItem *item = new QStandardItem(QLatin1String("model1 item ") + QString::number(i));
|
QStandardItem *item = new QStandardItem(QLatin1String("model1 item ") + QString::number(i));
|
||||||
parentItem->appendRow(item);
|
parentItem->appendRow(item);
|
||||||
parentItem = item;
|
parentItem = item;
|
||||||
}
|
}
|
||||||
|
|
||||||
QStandardItemModel *model2 = new QStandardItemModel;
|
QStandardItemModel model2;
|
||||||
QStandardItem *parentItem2 = model2->invisibleRootItem();
|
QStandardItem *parentItem2 = model2.invisibleRootItem();
|
||||||
for (int i = 0; i < 4; ++i) {
|
for (int i = 0; i < 4; ++i) {
|
||||||
QStandardItem *item = new QStandardItem(QLatin1String("model2 item ") + QString::number(i));
|
QStandardItem *item = new QStandardItem(QLatin1String("model2 item ") + QString::number(i));
|
||||||
parentItem2->appendRow(item);
|
parentItem2->appendRow(item);
|
||||||
parentItem2 = item;
|
parentItem2 = item;
|
||||||
}
|
}
|
||||||
|
|
||||||
QSortFilterProxyModel *toggleProxy = new QSortFilterProxyModel;
|
QSortFilterProxyModel toggleProxy;
|
||||||
toggleProxy->setSourceModel(model1);
|
toggleProxy.setSourceModel(&model1);
|
||||||
|
|
||||||
QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel;
|
QSortFilterProxyModel proxyModel;
|
||||||
proxyModel->setSourceModel(toggleProxy);
|
proxyModel.setSourceModel(&toggleProxy);
|
||||||
|
|
||||||
QModelIndex mi = proxyModel->index(0, 0, proxyModel->index(0, 0, proxyModel->index(0, 0)));
|
QModelIndex mi = proxyModel.index(0, 0, proxyModel.index(0, 0, proxyModel.index(0, 0)));
|
||||||
QItemSelectionModel ism(proxyModel);
|
QItemSelectionModel ism(&proxyModel);
|
||||||
ism.select(mi, QItemSelectionModel::Select);
|
ism.select(mi, QItemSelectionModel::Select);
|
||||||
QModelIndexList mil = ism.selectedIndexes();
|
QModelIndexList mil = ism.selectedIndexes();
|
||||||
QCOMPARE(mil.size(), 1);
|
QCOMPARE(mil.size(), 1);
|
||||||
QCOMPARE(mil.first(), mi);
|
QCOMPARE(mil.first(), mi);
|
||||||
|
|
||||||
toggleProxy->setSourceModel(model2);
|
toggleProxy.setSourceModel(&model2);
|
||||||
// No crash, it's good news!
|
// No crash, it's good news!
|
||||||
QVERIFY(ism.selection().isEmpty());
|
QVERIFY(ism.selection().isEmpty());
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user