From ccbe311a4bcb123933499126278ba48aab36427a Mon Sep 17 00:00:00 2001 From: Cole Robinson Date: Sun, 5 Jul 2020 12:51:45 -0400 Subject: [PATCH 4/6] Fix PY_SSIZE_T_CLEAN deprecation warning Seen running on fedora 32: DeprecationWarning: PY_SSIZE_T_CLEAN will be required for '#' formats ret = libvirtmod.virDomainLookupByUUID(self._o, uuid) This comes from here: https://bugs.python.org/issue36381 See the section about PY_SSIZE_T_CLEAN here: https://docs.python.org/3/c-api/arg.html#strings-and-buffers Solution is to use Py_ssize_t instead of int for unpacked '#' values, combined with defined PY_SSIZE_T_CLEAN before importing Python.h. The latter turns these deprecation warnings into runtime segfaults though if we missed an instance. I verified the virt-manager's test suite works fine after this change Signed-off-by: Cole Robinson --- libvirt-override.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/libvirt-override.c b/libvirt-override.c index 2b39ace..00efe7f 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -17,6 +17,7 @@ /* We want to see *_LAST enums. */ #define VIR_ENUM_SENTINELS +#define PY_SSIZE_T_CLEAN #include #include #include @@ -3040,7 +3041,7 @@ libvirt_virDomainLookupByUUID(PyObject *self ATTRIBUTE_UNUSED, virConnectPtr conn; PyObject *pyobj_conn; unsigned char * uuid; - int len; + Py_ssize_t len; if (!PyArg_ParseTuple(args, (char *)"Oz#:virDomainLookupByUUID", &pyobj_conn, &uuid, &len)) @@ -3283,7 +3284,7 @@ libvirt_virNetworkLookupByUUID(PyObject *self ATTRIBUTE_UNUSED, virConnectPtr conn; PyObject *pyobj_conn; unsigned char * uuid; - int len; + Py_ssize_t len; if (!PyArg_ParseTuple(args, (char *)"Oz#:virNetworkLookupByUUID", &pyobj_conn, &uuid, &len)) @@ -3992,7 +3993,7 @@ libvirt_virStoragePoolLookupByUUID(PyObject *self ATTRIBUTE_UNUSED, virConnectPtr conn; PyObject *pyobj_conn; unsigned char * uuid; - int len; + Py_ssize_t len; if (!PyArg_ParseTuple(args, (char *)"Oz#:virStoragePoolLookupByUUID", &pyobj_conn, &uuid, &len)) @@ -4233,7 +4234,7 @@ libvirt_virSecretLookupByUUID(PyObject *self ATTRIBUTE_UNUSED, virConnectPtr conn; PyObject *pyobj_conn; unsigned char * uuid; - int len; + Py_ssize_t len; if (!PyArg_ParseTuple(args, (char *)"Oz#:virSecretLookupByUUID", &pyobj_conn, &uuid, &len)) @@ -4393,7 +4394,7 @@ libvirt_virSecretSetValue(PyObject *self ATTRIBUTE_UNUSED, virSecretPtr secret; PyObject *pyobj_secret; const char *value; - int size; + Py_ssize_t size; unsigned int flags; if (!PyArg_ParseTuple(args, (char *)"Oz#I:virSecretSetValue", &pyobj_secret, @@ -4402,8 +4403,8 @@ libvirt_virSecretSetValue(PyObject *self ATTRIBUTE_UNUSED, secret = (virSecretPtr) PyvirSecret_Get(pyobj_secret); LIBVIRT_BEGIN_ALLOW_THREADS; - c_retval = virSecretSetValue(secret, (const unsigned char *)value, size, - flags); + c_retval = virSecretSetValue(secret, (const unsigned char *)value, + (size_t) size, flags); LIBVIRT_END_ALLOW_THREADS; return libvirt_intWrap(c_retval); @@ -4471,7 +4472,7 @@ libvirt_virNWFilterLookupByUUID(PyObject *self ATTRIBUTE_UNUSED, virConnectPtr conn; PyObject *pyobj_conn; unsigned char * uuid; - int len; + Py_ssize_t len; if (!PyArg_ParseTuple(args, (char *)"Oz#:virNWFilterLookupByUUID", &pyobj_conn, &uuid, &len)) @@ -10247,7 +10248,7 @@ libvirt_virNetworkPortLookupByUUID(PyObject *self ATTRIBUTE_UNUSED, virNetworkPtr net; PyObject *pyobj_net; unsigned char *uuid; - int len; + Py_ssize_t len; if (!PyArg_ParseTuple(args, (char *)"Oz#:virNetworkPortLookupByUUID", &pyobj_net, &uuid, &len)) -- 2.27.0