From 3f8aa91db35d1650d8826cf7cc74958954ca0a3f Mon Sep 17 00:00:00 2001 From: Michal Privoznik Date: Mon, 13 Feb 2023 14:45:23 +0100 Subject: libvirt_virConnectOpenAuth: Avoid plain PyLong_AsLong() call When constructing the list of credentials to pass to virConnectOpenAuth(), the virConnectAuth.credtype member is set via plain PyLong_AsLong() without any error checking. Well, the code relies on virConnectOpenAuth() to do sanity check of passed arguments. Switch to libvirt_intUnwrap() which does check for errors and avoid needless trip to libvirt's public API upon error. Signed-off-by: Michal Privoznik --- libvirt-override.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libvirt-override.c b/libvirt-override.c index d1a55c5..0aaeb31 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -2012,7 +2012,7 @@ libvirt_virConnectOpenAuth(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { PyObject *py_retval; - virConnectPtr c_retval; + virConnectPtr c_retval = NULL; char * name; unsigned int flags; PyObject *pyauth; @@ -2036,7 +2036,8 @@ libvirt_virConnectOpenAuth(PyObject *self ATTRIBUTE_UNUSED, for (i = 0; i < auth.ncredtype; i++) { PyObject *val; val = PyList_GetItem(pycredtype, i); - auth.credtype[i] = (int)PyLong_AsLong(val); + if (libvirt_intUnwrap(val, &auth.credtype[i]) < 0) + goto cleanup; } } if (pycredcb && pycredcb != Py_None) @@ -2047,6 +2048,7 @@ libvirt_virConnectOpenAuth(PyObject *self ATTRIBUTE_UNUSED, c_retval = virConnectOpenAuth(name, &auth, flags); LIBVIRT_END_ALLOW_THREADS; + cleanup: VIR_FREE(auth.credtype); py_retval = libvirt_virConnectPtrWrap((virConnectPtr) c_retval); return py_retval; -- cgit v1.2.1