From cd66d6d632b4a8190e97f265ee163f11b5ae38e6 Mon Sep 17 00:00:00 2001 From: Oren Milman Date: Wed, 8 Nov 2017 11:57:02 +0200 Subject: [PATCH] bpo-31764: Prevent a crash in sqlite3.Cursor.close() in case the Cursor object is uninitialized (GH-4333) --- Lib/sqlite3/test/regression.py | 3 +++ .../next/Library/2017-11-08-11-02-01.bpo-31764.gtlhKj.rst | 2 ++ Modules/_sqlite/cursor.c | 5 +++++ 3 files changed, 10 insertions(+) create mode 100644 Misc/NEWS.d/next/Library/2017-11-08-11-02-01.bpo-31764.gtlhKj.rst diff --git a/Lib/sqlite3/test/regression.py b/Lib/sqlite3/test/regression.py index 323b25dbb2..7eeac324d2 100644 --- a/Lib/sqlite3/test/regression.py +++ b/Lib/sqlite3/test/regression.py @@ -177,6 +177,9 @@ class RegressionTests(unittest.TestCase): pass except: self.fail("should have raised ProgrammingError") + with self.assertRaisesRegexp(sqlite.ProgrammingError, + r'^Base Cursor\.__init__ not called\.$'): + cur.close() def CheckConnectionConstructorCallCheck(self): """ diff --git a/Misc/NEWS.d/next/Library/2017-11-08-11-02-01.bpo-31764.gtlhKj.rst b/Misc/NEWS.d/next/Library/2017-11-08-11-02-01.bpo-31764.gtlhKj.rst new file mode 100644 index 0000000000..06af91db2b --- /dev/null +++ b/Misc/NEWS.d/next/Library/2017-11-08-11-02-01.bpo-31764.gtlhKj.rst @@ -0,0 +1,2 @@ +Prevent a crash in ``sqlite3.Cursor.close()`` in case the ``Cursor`` object +is uninitialized. Patch by Oren Milman. diff --git a/Modules/_sqlite/cursor.c b/Modules/_sqlite/cursor.c index 3197e78aae..b7c2d798da 100644 --- a/Modules/_sqlite/cursor.c +++ b/Modules/_sqlite/cursor.c @@ -1014,6 +1014,11 @@ PyObject* pysqlite_noop(pysqlite_Connection* self, PyObject* args) PyObject* pysqlite_cursor_close(pysqlite_Cursor* self, PyObject* args) { + if (!self->connection) { + PyErr_SetString(pysqlite_ProgrammingError, + "Base Cursor.__init__ not called."); + return NULL; + } if (!pysqlite_check_thread(self->connection) || !pysqlite_check_connection(self->connection)) { return NULL; } -- 2.50.1