summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMark Brand <mabrand@mabrand.nl>2015-12-09 01:08:20 +0100
committerSimon Hausmann <simon.hausmann@theqtcompany.com>2015-12-09 08:41:54 +0000
commit02a730331e123d2db778c8af62d7c0e3098da813 (patch)
treee05cc805cffcfd826d8ad08c1b6ab17540b0f919 /src
parent371c2e478604af3e992d26f10ed755a86e166380 (diff)
qsql_sqlite: fix segfault in dtor of orphan result
d79ae904660af7a83dc42a389c2457a8c94020f7 accidentally removed the check on the driver pointer before dereferencing it. This causes a segfault when deleting a result object after its driver has already been deleted. This situation can arise when a database is removed, explicitly or probably also upon unloading the driver plugin, while related results still exist. The problem affected qttools/tests/auto/qhelpcontentmode. Task-number: QTBUG-49836 Change-Id: I8ce8f8a5e27d787309ac2ff644b388e333d76435 Reviewed-by: Mark Brand <mabrand@mabrand.nl>
Diffstat (limited to 'src')
-rw-r--r--src/sql/drivers/sqlite/qsql_sqlite.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/sql/drivers/sqlite/qsql_sqlite.cpp b/src/sql/drivers/sqlite/qsql_sqlite.cpp
index c7086e1777..66e5724e6f 100644
--- a/src/sql/drivers/sqlite/qsql_sqlite.cpp
+++ b/src/sql/drivers/sqlite/qsql_sqlite.cpp
@@ -351,7 +351,8 @@ QSQLiteResult::QSQLiteResult(const QSQLiteDriver* db)
QSQLiteResult::~QSQLiteResult()
{
Q_D(QSQLiteResult);
- const_cast<QSQLiteDriverPrivate*>(d->drv_d_func())->results.removeOne(this);
+ if (d->drv_d_func())
+ const_cast<QSQLiteDriverPrivate*>(d->drv_d_func())->results.removeOne(this);
d->cleanup();
}