From dedd4a7a7ca9be18ed9fc958ea4da48c2f1fd82f Mon Sep 17 00:00:00 2001 From: Honglei Zhang Date: Mon, 12 Mar 2012 16:52:25 +0200 Subject: Fix memory leak when sqlite3_open_v2 fails According to SQLite documentation, a database connection handle is usually returned, even if an error occurs. This behavior has caused Qt to leak memory when opening a database is failed. Now, even if sqlite3_open_v2() does not return SQLITE_OK, Qt tries to release SQLite database handle by calling sqlite3_close(). Task-number: QTBUG-15773 Change-Id: I6538e2897216828a9cfb95b7d4a5cec437aa6c28 Reviewed-by: Mark Brand Reviewed-by: Andy Shaw Reviewed-by: Michael Goddard --- src/sql/drivers/sqlite/qsql_sqlite.cpp | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src') diff --git a/src/sql/drivers/sqlite/qsql_sqlite.cpp b/src/sql/drivers/sqlite/qsql_sqlite.cpp index b2a55252ac..deb29f8059 100644 --- a/src/sql/drivers/sqlite/qsql_sqlite.cpp +++ b/src/sql/drivers/sqlite/qsql_sqlite.cpp @@ -577,6 +577,11 @@ bool QSQLiteDriver::open(const QString & db, const QString &, const QString &, c setOpenError(false); return true; } else { + if (d->access) { + sqlite3_close(d->access); + d->access = 0; + } + setLastError(qMakeError(d->access, tr("Error opening database"), QSqlError::ConnectionError)); setOpenError(true); -- cgit v1.2.3