diff options
author | Alexandru Croitor <alexandru.croitor@qt.io> | 2020-06-30 18:49:57 +0200 |
---|---|---|
committer | Alexandru Croitor <alexandru.croitor@qt.io> | 2020-07-01 10:03:57 +0200 |
commit | fb55e1e71e3c98aca880c23d97f9e811e2b406a0 (patch) | |
tree | e7543c1df9f17f59bc8430776ad35a454e52bb54 /tests/auto/sql/models/qsqlrelationaldelegate/tst_qsqlrelationaldelegate.cpp | |
parent | a0468331761b497992e9d554c210583781308272 (diff) |
Sql: Fix heap-user-after-free for globally initialized db objects
Becaues the database objects were created as globals, there was a
possible use-after-free issue when deleting the objects on application
exit.
Move the initialization of the database objects into static variables
inside the test constructor.
As a drive-by, also add one missing test to the CMake projects.
Fixes: QTBUG-85357
Change-Id: I2c8f2c5daee96bb9d1d21dae37950a2da5ffdf27
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'tests/auto/sql/models/qsqlrelationaldelegate/tst_qsqlrelationaldelegate.cpp')
-rw-r--r-- | tests/auto/sql/models/qsqlrelationaldelegate/tst_qsqlrelationaldelegate.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/tests/auto/sql/models/qsqlrelationaldelegate/tst_qsqlrelationaldelegate.cpp b/tests/auto/sql/models/qsqlrelationaldelegate/tst_qsqlrelationaldelegate.cpp index a7089c06a1..9b00cda3dd 100644 --- a/tests/auto/sql/models/qsqlrelationaldelegate/tst_qsqlrelationaldelegate.cpp +++ b/tests/auto/sql/models/qsqlrelationaldelegate/tst_qsqlrelationaldelegate.cpp @@ -34,8 +34,8 @@ #include "../../kernel/qsqldatabase/tst_databases.h" -const QString reltest1(qTableName("reltest1", __FILE__, QSqlDatabase())), - reltest2(qTableName("reltest2", __FILE__, QSqlDatabase())); +QString reltest1; +QString reltest2; class tst_QSqlRelationalDelegate : public QObject { @@ -45,6 +45,7 @@ public: void recreateTestTables(QSqlDatabase); tst_Databases dbs; + tst_QSqlRelationalDelegate(); public slots: void initTestCase_data(); @@ -59,6 +60,14 @@ private: void dropTestTables(QSqlDatabase db); }; +tst_QSqlRelationalDelegate::tst_QSqlRelationalDelegate() +{ + static QSqlDatabase static_qtest_db_1 = QSqlDatabase(); + reltest1 = qTableName("reltest1", __FILE__, static_qtest_db_1); + + static QSqlDatabase static_qtest_db_2 = QSqlDatabase(); + reltest2 = qTableName("reltest2", __FILE__, static_qtest_db_2); +} void tst_QSqlRelationalDelegate::initTestCase_data() { |