From 5eb45d7d4e812e89d77da84cc619e9db81561a34 Mon Sep 17 00:00:00 2001 From: Erlend Egeberg Aasland Date: Tue, 26 May 2020 14:18:19 +0200 Subject: bpo-40737: Fix possible reference leak for sqlite3 initialization (GH-20323) --- .../Library/2020-05-23-00-22-11.bpo-40737.iph-CM.rst | 1 + Modules/_sqlite/module.c | 20 ++++++++++++-------- 2 files changed, 13 insertions(+), 8 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2020-05-23-00-22-11.bpo-40737.iph-CM.rst diff --git a/Misc/NEWS.d/next/Library/2020-05-23-00-22-11.bpo-40737.iph-CM.rst b/Misc/NEWS.d/next/Library/2020-05-23-00-22-11.bpo-40737.iph-CM.rst new file mode 100644 index 0000000..f068d3a --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-05-23-00-22-11.bpo-40737.iph-CM.rst @@ -0,0 +1 @@ +Fix possible reference leak for :mod:`sqlite3` initialization. diff --git a/Modules/_sqlite/module.c b/Modules/_sqlite/module.c index 4d9d3d4..71d951e 100644 --- a/Modules/_sqlite/module.c +++ b/Modules/_sqlite/module.c @@ -346,6 +346,14 @@ static struct PyModuleDef _sqlite3module = { NULL }; +#define ADD_TYPE(module, type) \ +do { \ + if (PyModule_AddType(module, &type) < 0) { \ + Py_DECREF(module); \ + return NULL; \ + } \ +} while (0) + PyMODINIT_FUNC PyInit__sqlite3(void) { PyObject *module, *dict; @@ -366,14 +374,10 @@ PyMODINIT_FUNC PyInit__sqlite3(void) return NULL; } - Py_INCREF(&pysqlite_ConnectionType); - PyModule_AddObject(module, "Connection", (PyObject*) &pysqlite_ConnectionType); - Py_INCREF(&pysqlite_CursorType); - PyModule_AddObject(module, "Cursor", (PyObject*) &pysqlite_CursorType); - Py_INCREF(&pysqlite_PrepareProtocolType); - PyModule_AddObject(module, "PrepareProtocol", (PyObject*) &pysqlite_PrepareProtocolType); - Py_INCREF(&pysqlite_RowType); - PyModule_AddObject(module, "Row", (PyObject*) &pysqlite_RowType); + ADD_TYPE(module, pysqlite_ConnectionType); + ADD_TYPE(module, pysqlite_CursorType); + ADD_TYPE(module, pysqlite_PrepareProtocolType); + ADD_TYPE(module, pysqlite_RowType); if (!(dict = PyModule_GetDict(module))) { goto error; -- cgit v0.12