From ca6b759ccf64cf6eb958e2589c861c9c23a0bf64 Mon Sep 17 00:00:00 2001 From: Otto Moerbeek Date: Fri, 1 May 2020 12:26:51 +0200 Subject: [PATCH] Better version that also plug the leaks for errors != the ones tested for. --- pdns/ssqlite3.cc | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/pdns/ssqlite3.cc b/pdns/ssqlite3.cc index bb91ba4f34..e35b7fb9d0 100644 --- a/pdns/ssqlite3.cc +++ b/pdns/ssqlite3.cc @@ -234,19 +234,28 @@ std::unique_ptr SSQLite3::prepare(const string& query, int nparam void SSQLite3::execute(const string& query) { char *errmsg; - int rc; - if (sqlite3_exec(m_pDB, query.c_str(), NULL, NULL, &errmsg) == SQLITE_BUSY) { - std::string errstr1(errmsg); + std::string errstr1; + int rc = sqlite3_exec(m_pDB, query.c_str(), NULL, NULL, &errmsg); + if (rc != 0) { + errstr1 = errmsg; sqlite3_free(errmsg); + } + if (rc == SQLITE_BUSY) { if (m_in_transaction) { throw("Failed to execute query: " + errstr1); } else { - if ((rc = sqlite3_exec(m_pDB, query.c_str(), NULL, NULL, &errmsg) != SQLITE_OK) && rc != SQLITE_DONE && rc != SQLITE_ROW) { - std::string errstr2(errmsg); + rc = sqlite3_exec(m_pDB, query.c_str(), NULL, NULL, &errmsg); + std::string errstr2; + if (rc != 0) { + errstr2 = errmsg; sqlite3_free(errmsg); + } + if (rc != SQLITE_OK && rc != SQLITE_DONE && rc != SQLITE_ROW) { throw("Failed to execute query: " + errstr2); } } + } else if (rc != 0) { + throw("Failed to execute query: " + errstr1); } } -- 2.39.2