From 957b9245b0cea119eeef621c2c8ce96a1734f21b Mon Sep 17 00:00:00 2001 From: Erlend Egeberg Aasland Date: Sun, 20 Jun 2021 21:24:32 +0200 Subject: [PATCH 1/2] [3.10] bpo-44087: Disallow instantiation of sqlite3.Statement (GH-26567) (cherry picked from commit 7d0a47e1affd0a2f56600f3e9473f55f931595bd) Co-authored-by: Erlend Egeberg Aasland --- Lib/sqlite3/test/dbapi.py | 5 +++++ Modules/_sqlite/statement.c | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Lib/sqlite3/test/dbapi.py b/Lib/sqlite3/test/dbapi.py index 39c9bf5b61143d..a958d4df8bb0c8 100644 --- a/Lib/sqlite3/test/dbapi.py +++ b/Lib/sqlite3/test/dbapi.py @@ -25,6 +25,7 @@ import sqlite3 as sqlite import sys +from test.support import check_disallow_instantiation from test.support.os_helper import TESTFN, unlink @@ -92,6 +93,10 @@ def test_shared_cache_deprecated(self): sqlite.enable_shared_cache(enable) self.assertIn("dbapi.py", cm.filename) + def test_disallow_instantiation(self): + cx = sqlite.connect(":memory:") + check_disallow_instantiation(self, type(cx("select 1"))) + class ConnectionTests(unittest.TestCase): diff --git a/Modules/_sqlite/statement.c b/Modules/_sqlite/statement.c index 2fd9ba3ca801ad..c875eb0cd74a40 100644 --- a/Modules/_sqlite/statement.c +++ b/Modules/_sqlite/statement.c @@ -509,7 +509,7 @@ static PyType_Spec stmt_spec = { .name = MODULE_NAME ".Statement", .basicsize = sizeof(pysqlite_Statement), .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | - Py_TPFLAGS_IMMUTABLETYPE), + Py_TPFLAGS_IMMUTABLETYPE | Py_TPFLAGS_DISALLOW_INSTANTIATION), .slots = stmt_slots, }; PyTypeObject *pysqlite_StatementType = NULL; From 134d4302fb33c3e22f4a12ec6de44952a23328b4 Mon Sep 17 00:00:00 2001 From: "Erlend E. Aasland" Date: Sun, 20 Jun 2021 22:47:00 +0200 Subject: [PATCH 2/2] test.support.check_disallow_instantiation is not present in 3.10 --- Lib/sqlite3/test/dbapi.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Lib/sqlite3/test/dbapi.py b/Lib/sqlite3/test/dbapi.py index a958d4df8bb0c8..0716e656a7f26f 100644 --- a/Lib/sqlite3/test/dbapi.py +++ b/Lib/sqlite3/test/dbapi.py @@ -25,7 +25,6 @@ import sqlite3 as sqlite import sys -from test.support import check_disallow_instantiation from test.support.os_helper import TESTFN, unlink @@ -95,7 +94,8 @@ def test_shared_cache_deprecated(self): def test_disallow_instantiation(self): cx = sqlite.connect(":memory:") - check_disallow_instantiation(self, type(cx("select 1"))) + tp = type(cx("select 1")) + self.assertRaises(TypeError, tp) class ConnectionTests(unittest.TestCase):