From: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> Date: Tue, 7 Nov 2017 00:45:19 +0000 (-0800) Subject: bpo-31764: Prevent a crash in sqlite3.Cursor.close() in case the Cursor object is... X-Git-Tag: v3.6.4rc1~92 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b0331c94c2a210d50e43d99b249ec83ee165e70c;p=python bpo-31764: Prevent a crash in sqlite3.Cursor.close() in case the Cursor object is uninitialized (GH-3958) (#4303) (cherry picked from commit edb13ae48c17210fa4b2d40a6833ca09db5c121b) --- diff --git a/Lib/sqlite3/test/regression.py b/Lib/sqlite3/test/regression.py index 3ff9abd989..34cd233535 100644 --- a/Lib/sqlite3/test/regression.py +++ b/Lib/sqlite3/test/regression.py @@ -190,6 +190,9 @@ class RegressionTests(unittest.TestCase): cur = Cursor(con) with self.assertRaises(sqlite.ProgrammingError): cur.execute("select 4+5").fetchall() + with self.assertRaisesRegex(sqlite.ProgrammingError, + r'^Base Cursor\.__init__ not called\.$'): + cur.close() def CheckStrSubclass(self): """ diff --git a/Misc/NEWS.d/next/Library/2017-10-11-22-18-04.bpo-31764.EMyIkK.rst b/Misc/NEWS.d/next/Library/2017-10-11-22-18-04.bpo-31764.EMyIkK.rst new file mode 100644 index 0000000000..a5a4ce548e --- /dev/null +++ b/Misc/NEWS.d/next/Library/2017-10-11-22-18-04.bpo-31764.EMyIkK.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 b6257a0b9d..8237340947 100644 --- a/Modules/_sqlite/cursor.c +++ b/Modules/_sqlite/cursor.c @@ -916,6 +916,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; }