summaryrefslogtreecommitdiffstats
path: root/tests/auto/sql/models
diff options
context:
space:
mode:
authorHonglei Zhang <honglei.zhang@nokia.com>2012-03-07 18:54:58 +0200
committerQt by Nokia <qt-info@nokia.com>2012-03-30 19:51:43 +0200
commit06001ce0085c5fd47bbcc3c7ab151f7c0ac2f0ed (patch)
treeb1f2949df1825048a247ed3f91a994a188eb3dc2 /tests/auto/sql/models
parentfa9cf676159e8d9876c8532dc4e90f4bf5d9a47b (diff)
Fix crash when an invalid filter is set
QSqlTableModel::headerData() generates a crash if an invalid filter is set. QSqlQueryModel::indexInQuery() should check the index value before applied to d->colOffsets[]. QSqlQueryModel::initRecordAndPrimaryIndex() is updated to sync the size of rec and colOffsets. Task-number: QTBUG-23879 Change-Id: Ic9f88bb288592aa6fb3c1415cc818632dadaab56 Reviewed-by: Michael Goddard <michael.goddard@nokia.com> Reviewed-by: Mark Brand <mabrand@mabrand.nl>
Diffstat (limited to 'tests/auto/sql/models')
-rw-r--r--tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp b/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp
index afe2c59144..2cea8b3546 100644
--- a/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp
+++ b/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp
@@ -133,6 +133,9 @@ private slots:
void insertBeforeDelete_data() { generic_data(); }
void insertBeforeDelete();
+
+ void invalidFilterAndHeaderData_data() { generic_data(); }
+ void invalidFilterAndHeaderData(); //QTBUG-23879
private:
void generic_data(const QString& engine=QString());
void generic_data_with_strategies(const QString& engine=QString());
@@ -1681,5 +1684,25 @@ void tst_QSqlTableModel::insertBeforeDelete()
QCOMPARE(model.rowCount(), 5);
}
+void tst_QSqlTableModel::invalidFilterAndHeaderData()
+{
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+
+ QSqlTableModel model(0, db);
+ model.setTable(test);
+ model.setEditStrategy(QSqlTableModel::OnManualSubmit);
+ QVERIFY_SQL(model, select());
+ QVERIFY_SQL(model, setHeaderData(0, Qt::Horizontal, "id"));
+ QVERIFY_SQL(model, setHeaderData(1, Qt::Horizontal, "name"));
+ QVERIFY_SQL(model, setHeaderData(2, Qt::Horizontal, "title"));
+
+ model.setFilter("some nonsense");
+
+ QVariant v = model.headerData(0, Qt::Horizontal, Qt::SizeHintRole);
+ QVERIFY(!v.isValid());
+}
+
QTEST_MAIN(tst_QSqlTableModel)
#include "tst_qsqltablemodel.moc"