s4/messaging/py: Fix callback return value leak
authorJoseph Sutton <josephsutton@catalyst.net.nz>
Tue, 23 May 2023 00:47:54 +0000 (12:47 +1200)
committerAndrew Bartlett <abartlet@samba.org>
Wed, 24 May 2023 00:50:31 +0000 (00:50 +0000)
Signed-off-by: Joseph Sutton <josephsutton@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
source4/lib/messaging/pymessaging.c

index 5dd5839b629562e2322759900a219c398f5ab609..80ca7a990735c69c6e5feddc8f1ce6c2c8039dda 100644 (file)
@@ -194,6 +194,7 @@ static void py_msg_callback_wrapper(struct imessaging_context *msg,
 {
        PyObject *py_server_id, *callback_and_tuple = (PyObject *)private_data;
        PyObject *callback, *py_private;
+       PyObject *result = NULL;
 
        struct server_id *p_server_id = NULL;
 
@@ -218,11 +219,12 @@ static void py_msg_callback_wrapper(struct imessaging_context *msg,
        py_server_id = py_return_ndr_struct("samba.dcerpc.server_id", "server_id", p_server_id, p_server_id);
        talloc_unlink(NULL, p_server_id);
 
-       PyObject_CallFunction(callback, discard_const_p(char, "OiOs#"),
-                             py_private,
-                             msg_type,
-                             py_server_id,
-                             data->data, data->length);
+       result = PyObject_CallFunction(callback, discard_const_p(char, "OiOs#"),
+                                      py_private,
+                                      msg_type,
+                                      py_server_id,
+                                      data->data, data->length);
+       Py_XDECREF(result);
 }
 
 static PyObject *py_imessaging_register(PyObject *self, PyObject *args, PyObject *kwargs)