From df7b7cca205e03715945634fc48b11810aa7fbaf Mon Sep 17 00:00:00 2001 From: "Erlend E. Aasland" Date: Mon, 2 May 2022 18:18:20 -0600 Subject: [PATCH 1/2] gh-92206: Improve scoping of sqlite3 register cursor helper --- Modules/_sqlite/connection.c | 26 -------------------------- Modules/_sqlite/cursor.c | 24 +++++++++++++++++++++++- 2 files changed, 23 insertions(+), 27 deletions(-) diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c index fe244c8b22771a..75d29704695c63 100644 --- a/Modules/_sqlite/connection.c +++ b/Modules/_sqlite/connection.c @@ -371,32 +371,6 @@ connection_dealloc(pysqlite_Connection *self) Py_DECREF(tp); } -/* - * Registers a cursor with the connection. - * - * 0 => error; 1 => ok - */ -int pysqlite_connection_register_cursor(pysqlite_Connection* connection, PyObject* cursor) -{ - PyObject* weakref; - - weakref = PyWeakref_NewRef((PyObject*)cursor, NULL); - if (!weakref) { - goto error; - } - - if (PyList_Append(connection->cursors, weakref) != 0) { - Py_CLEAR(weakref); - goto error; - } - - Py_DECREF(weakref); - - return 1; -error: - return 0; -} - /*[clinic input] _sqlite3.Connection.cursor as pysqlite_connection_cursor diff --git a/Modules/_sqlite/cursor.c b/Modules/_sqlite/cursor.c index 861704f95cc83c..84f481792ddd3b 100644 --- a/Modules/_sqlite/cursor.c +++ b/Modules/_sqlite/cursor.c @@ -35,6 +35,28 @@ class _sqlite3.Cursor "pysqlite_Cursor *" "clinic_state()->CursorType" [clinic start generated code]*/ /*[clinic end generated code: output=da39a3ee5e6b4b0d input=3c5b8115c5cf30f1]*/ +/* + * Registers a cursor with the connection. + * + * 0 => error; 1 => ok + */ +static int +register_cursor(pysqlite_Connection *connection, PyObject *cursor) +{ + PyObject *weakref = PyWeakref_NewRef((PyObject *)cursor, NULL); + if (weakref == NULL) { + return 0; + } + + if (PyList_Append(connection->cursors, weakref) < 0) { + Py_CLEAR(weakref); + return 0; + } + + Py_DECREF(weakref); + return 1; +} + /*[clinic input] _sqlite3.Cursor.__init__ as pysqlite_cursor_init @@ -70,7 +92,7 @@ pysqlite_cursor_init_impl(pysqlite_Cursor *self, return -1; } - if (!pysqlite_connection_register_cursor(connection, (PyObject*)self)) { + if (!register_cursor(connection, (PyObject *)self)) { return -1; } From 68ac0567cf3b75b757fec10e1bf751f493f705d9 Mon Sep 17 00:00:00 2001 From: "Erlend E. Aasland" Date: Mon, 2 May 2022 22:24:13 -0600 Subject: [PATCH 2/2] Remove declaration as well --- Modules/_sqlite/connection.h | 1 - 1 file changed, 1 deletion(-) diff --git a/Modules/_sqlite/connection.h b/Modules/_sqlite/connection.h index 2b946ff3c7369b..629fe3d3a95a11 100644 --- a/Modules/_sqlite/connection.h +++ b/Modules/_sqlite/connection.h @@ -99,7 +99,6 @@ typedef struct PyObject* NotSupportedError; } pysqlite_Connection; -int pysqlite_connection_register_cursor(pysqlite_Connection* connection, PyObject* cursor); int pysqlite_check_thread(pysqlite_Connection* self); int pysqlite_check_connection(pysqlite_Connection* con);