s3/py_passdb: maintain correct refcount on allocation failure
authorDouglas Bagnall <douglas.bagnall@catalyst.net.nz>
Wed, 2 May 2018 21:39:18 +0000 (09:39 +1200)
committerNoel Power <npower@samba.org>
Tue, 29 Jan 2019 12:45:32 +0000 (13:45 +0100)
Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Noel Power <npower@samba.org>
source3/passdb/py_passdb.c

index 1b4ec3d531eaee040607f8b4ddce53a911e42395..2ac2942a47fa3fb7b9a036f593d2d6ed0dddb093 100644 (file)
@@ -3945,6 +3945,7 @@ MODULE_INIT_FUNC(passdb)
 
        dom_sid_Type = (PyTypeObject *)PyObject_GetAttrString(mod, "dom_sid");
        if (dom_sid_Type == NULL) {
+               Py_DECREF(mod);
                talloc_free(frame);
                return NULL;
        }
@@ -3953,6 +3954,7 @@ MODULE_INIT_FUNC(passdb)
        security_Type = (PyTypeObject *)PyObject_GetAttrString(mod, "descriptor");
        Py_DECREF(mod);
        if (security_Type == NULL) {
+               Py_DECREF(dom_sid_Type);
                talloc_free(frame);
                return NULL;
        }
@@ -3960,6 +3962,8 @@ MODULE_INIT_FUNC(passdb)
        /* Import GUID type from dcerpc.misc */
        mod = PyImport_ImportModule("samba.dcerpc.misc");
        if (mod == NULL) {
+               Py_DECREF(security_Type);
+               Py_DECREF(dom_sid_Type);
                talloc_free(frame);
                return NULL;
        }
@@ -3967,6 +3971,8 @@ MODULE_INIT_FUNC(passdb)
        guid_Type = (PyTypeObject *)PyObject_GetAttrString(mod, "GUID");
        Py_DECREF(mod);
        if (guid_Type == NULL) {
+               Py_DECREF(security_Type);
+               Py_DECREF(dom_sid_Type);
                talloc_free(frame);
                return NULL;
        }