python: Avoid crash if callback parameters cannot be built

In the case that building the parameters to the Python event callback
fails, args was returned as NULL.  We immediately tried to call
Py_INCREF on this which crashed.  Returning NULL means the Python
function threw an exception, so print the exception and return (there
is no way to return an error here - the event is lost).

Reported-by: Yonatan Shtarkman
See: https://listman.redhat.com/archives/libguestfs/2023-February/030653.html
This commit is contained in:
Richard W.M. Jones
2023-02-14 18:42:40 +00:00
parent 43bb5c4306
commit 6ef5837e2d

View File

@@ -134,18 +134,21 @@ guestfs_int_py_event_callback_wrapper (guestfs_h *g,
args = Py_BuildValue ("(Kis#O)",
(unsigned PY_LONG_LONG) event, event_handle,
buf, buf_len, py_array);
if (args == NULL) {
PyErr_PrintEx (0);
goto out;
}
Py_INCREF (args);
py_r = PyObject_CallObject (py_callback, args);
Py_DECREF (args);
if (py_r != NULL)
Py_DECREF (py_r);
else
/* Callback threw an exception: print it. */
PyErr_PrintEx (0);
out:
PyGILState_Release (py_save);
}