From 78eac57f3dc788345f8f3e9b6dbd3dce70b8f511 Mon Sep 17 00:00:00 2001 From: Edward Welbourne Date: Mon, 24 Jan 2022 12:44:38 +0100 Subject: Check for null driver() before trying to exec() QSqlQuery::exec() took for granted that it can dereference driver(), which should be true for all sane usage; however, it should not crash if used misguidedly. Added regression test, based on bug report's reproducer, which crashes without the fix. Fixes: QTBUG-100037 Pick-to: 6.3 6.2 5.15 5.12 Change-Id: I94600bc60f89e82a1121b418144006a683921a38 Reviewed-by: Andy Shaw --- src/sql/kernel/qsqlquery.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/sql/kernel') diff --git a/src/sql/kernel/qsqlquery.cpp b/src/sql/kernel/qsqlquery.cpp index 86d086c866..afa4882b1b 100644 --- a/src/sql/kernel/qsqlquery.cpp +++ b/src/sql/kernel/qsqlquery.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2022 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtSql module of the Qt Toolkit. @@ -406,6 +406,10 @@ bool QSqlQuery::exec(const QString& query) QElapsedTimer t; t.start(); #endif + if (!driver()) { + qWarning("QSqlQuery::exec: called before driver has been set up"); + return false; + } if (d->ref.loadRelaxed() != 1) { bool fo = isForwardOnly(); *this = QSqlQuery(driver()->createResult()); -- cgit v1.2.3