From 02a730331e123d2db778c8af62d7c0e3098da813 Mon Sep 17 00:00:00 2001 From: Mark Brand Date: Wed, 9 Dec 2015 01:08:20 +0100 Subject: 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 --- src/sql/drivers/sqlite/qsql_sqlite.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/sql') 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(d->drv_d_func())->results.removeOne(this); + if (d->drv_d_func()) + const_cast(d->drv_d_func())->results.removeOne(this); d->cleanup(); } -- cgit v1.2.3