]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-1635741: _sqlite3 uses PyModule_AddObjectRef() (GH-23148)
authorErlend Egeberg Aasland <erlend.aasland@innova.no>
Wed, 4 Nov 2020 19:31:51 +0000 (20:31 +0100)
committerGitHub <noreply@github.com>
Wed, 4 Nov 2020 19:31:51 +0000 (20:31 +0100)
Modules/_sqlite/microprotocols.c
Modules/_sqlite/module.c

index cf1fefd671851db2e065829315076c2be21bc2da..41f086791ea4b7bab9968589fca191aef962ac23 100644 (file)
@@ -43,12 +43,10 @@ pysqlite_microprotocols_init(PyObject *module)
         return -1;
     }
 
-    if (PyModule_AddObject(module, "adapters", psyco_adapters) < 0) {
-        Py_DECREF(psyco_adapters);
-        return -1;
-    }
+    int res = PyModule_AddObjectRef(module, "adapters", psyco_adapters);
+    Py_DECREF(psyco_adapters);
 
-    return 0;
+    return res;
 }
 
 
index 33324402385f44c4240806b91e84ce06556ee00d..9fdf51417ed8830c3a1d1ba1dd88744cb67acfeb 100644 (file)
@@ -263,17 +263,17 @@ pysqlite_adapt_impl(PyObject *module, PyObject *obj, PyObject *proto,
     return pysqlite_microprotocols_adapt(obj, proto, alt);
 }
 
-static void converters_init(PyObject* module)
+static int converters_init(PyObject* module)
 {
     _pysqlite_converters = PyDict_New();
     if (!_pysqlite_converters) {
-        return;
+        return -1;
     }
 
-    if (PyModule_AddObject(module, "converters", _pysqlite_converters) < 0) {
-        Py_DECREF(_pysqlite_converters);
-    }
-    return;
+    int res = PyModule_AddObjectRef(module, "converters", _pysqlite_converters);
+    Py_DECREF(_pysqlite_converters);
+
+    return res;
 }
 
 static PyMethodDef module_methods[] = {
@@ -361,8 +361,9 @@ do {                                                            \
     if (!exc) {                                                 \
         goto error;                                             \
     }                                                           \
-    if (PyModule_AddObject(module, name, exc) < 0) {            \
-        Py_DECREF(exc);                                         \
+    int res = PyModule_AddObjectRef(module, name, exc);         \
+    Py_DECREF(exc);                                             \
+    if (res < 0) {                                              \
         goto error;                                             \
     }                                                           \
 } while (0)
@@ -416,9 +417,7 @@ PyMODINIT_FUNC PyInit__sqlite3(void)
        non-ASCII data and bytestrings to be returned for ASCII data.
        Now OptimizedUnicode is an alias for str, so it has no
        effect. */
-    Py_INCREF((PyObject*)&PyUnicode_Type);
-    if (PyModule_AddObject(module, "OptimizedUnicode", (PyObject*)&PyUnicode_Type) < 0) {
-        Py_DECREF((PyObject*)&PyUnicode_Type);
+    if (PyModule_AddObjectRef(module, "OptimizedUnicode", (PyObject*)&PyUnicode_Type) < 0) {
         goto error;
     }
 
@@ -441,7 +440,9 @@ PyMODINIT_FUNC PyInit__sqlite3(void)
     }
 
     /* initialize the default converters */
-    converters_init(module);
+    if (converters_init(module) < 0) {
+        goto error;
+    }
 
 error:
     if (PyErr_Occurred())