Signed-off-by: Giuseppe Scrivano <gscrivan(a)redhat.com>
---
python/libvirt-override.c | 88 +++++++++++++++++++++++++++++++++++++----------
1 file changed, 70 insertions(+), 18 deletions(-)
diff --git a/python/libvirt-override.c b/python/libvirt-override.c
index 83bca94..3b902bc 100644
--- a/python/libvirt-override.c
+++ b/python/libvirt-override.c
@@ -2095,7 +2095,7 @@ static int virConnectCredCallbackWrapper(virConnectCredentialPtr
cred,
PyObject *pyauth = (PyObject *)cbdata;
PyObject *pycbdata;
PyObject *pycb;
- PyObject *pyret;
+ PyObject *pyret = NULL;
int ret = -1;
size_t i;
@@ -2108,7 +2108,8 @@ static int virConnectCredCallbackWrapper(virConnectCredentialPtr
cred,
pycred = PyTuple_New(ncred);
for (i = 0; i < ncred; i++) {
PyObject *pycreditem;
- pycreditem = PyList_New(5);
+ if (!(pycreditem = PyList_New(5)))
+ goto cleanup;
Py_INCREF(Py_None);
PyTuple_SetItem(pycred, i, pycreditem);
PyList_SET_ITEM(pycreditem, 0, PyInt_FromLong((long) cred[i].type));
@@ -2382,7 +2383,10 @@ libvirt_virConnectListDomainsID(PyObject *self ATTRIBUTE_UNUSED,
return VIR_PY_NONE;
}
}
- py_retval = PyList_New(c_retval);
+ if (!(py_retval = PyList_New(c_retval))) {
+ VIR_FREE(ids);
+ return VIR_PY_NONE;
+ }
if (ids) {
for (i = 0; i < c_retval; i++) {
@@ -2472,7 +2476,12 @@ libvirt_virConnectListDefinedDomains(PyObject *self
ATTRIBUTE_UNUSED,
return VIR_PY_NONE;
}
}
- py_retval = PyList_New(c_retval);
+ if (!(py_retval = PyList_New(c_retval))) {
+ for (i = 0; i < c_retval; i++)
+ VIR_FREE(names[i]);
+ VIR_FREE(names);
+ return VIR_PY_NONE;
+ }
if (names) {
for (i = 0; i < c_retval; i++) {
@@ -2621,7 +2630,8 @@ libvirt_virDomainSnapshotListChildrenNames(PyObject *self
ATTRIBUTE_UNUSED,
return VIR_PY_NONE;
}
}
- py_retval = PyList_New(c_retval);
+ if (!(py_retval = PyList_New(c_retval)))
+ goto cleanup;
for (i = 0; i < c_retval; i++) {
if ((pyobj_snap = libvirt_constcharPtrWrap(names[i])) == NULL) {
@@ -2724,7 +2734,8 @@ libvirt_virDomainGetInfo(PyObject *self ATTRIBUTE_UNUSED, PyObject
*args) {
LIBVIRT_END_ALLOW_THREADS;
if (c_retval < 0)
return VIR_PY_NONE;
- py_retval = PyList_New(5);
+ if (!(py_retval = PyList_New(5)))
+ return VIR_PY_NONE;
PyList_SET_ITEM(py_retval, 0, libvirt_intWrap((int) info.state));
PyList_SET_ITEM(py_retval, 1, libvirt_ulongWrap(info.maxMem));
PyList_SET_ITEM(py_retval, 2, libvirt_ulongWrap(info.memory));
@@ -2757,7 +2768,9 @@ libvirt_virDomainGetState(PyObject *self ATTRIBUTE_UNUSED, PyObject
*args)
if (c_retval < 0)
return VIR_PY_NONE;
- py_retval = PyList_New(2);
+ if (!(py_retval = PyList_New(2)))
+ return VIR_PY_NONE;
+
PyList_SET_ITEM(py_retval, 0, libvirt_intWrap(state));
PyList_SET_ITEM(py_retval, 1, libvirt_intWrap(reason));
return py_retval;
@@ -2782,7 +2795,8 @@ libvirt_virDomainGetControlInfo(PyObject *self ATTRIBUTE_UNUSED,
PyObject *args)
LIBVIRT_END_ALLOW_THREADS;
if (c_retval < 0)
return VIR_PY_NONE;
- py_retval = PyList_New(3);
+ if (!(py_retval = PyList_New(3)))
+ return VIR_PY_NONE;
PyList_SET_ITEM(py_retval, 0, libvirt_intWrap(info.state));
PyList_SET_ITEM(py_retval, 1, libvirt_intWrap(info.details));
PyList_SET_ITEM(py_retval, 2, libvirt_longlongWrap(info.stateTime));
@@ -2808,7 +2822,9 @@ libvirt_virDomainGetBlockInfo(PyObject *self ATTRIBUTE_UNUSED,
PyObject *args) {
LIBVIRT_END_ALLOW_THREADS;
if (c_retval < 0)
return VIR_PY_NONE;
- py_retval = PyList_New(3);
+ if (!(py_retval = PyList_New(3)))
+ return VIR_PY_NONE;
+
PyList_SET_ITEM(py_retval, 0, libvirt_ulonglongWrap(info.capacity));
PyList_SET_ITEM(py_retval, 1, libvirt_ulonglongWrap(info.allocation));
PyList_SET_ITEM(py_retval, 2, libvirt_ulonglongWrap(info.physical));
@@ -2832,7 +2848,9 @@ libvirt_virNodeGetInfo(PyObject *self ATTRIBUTE_UNUSED, PyObject
*args) {
LIBVIRT_END_ALLOW_THREADS;
if (c_retval < 0)
return VIR_PY_NONE;
- py_retval = PyList_New(8);
+ if (!(py_retval = PyList_New(8)))
+ return VIR_PY_NONE;
+
PyList_SET_ITEM(py_retval, 0, libvirt_constcharPtrWrap(&info.model[0]));
PyList_SET_ITEM(py_retval, 1, libvirt_longWrap((long) info.memory >> 10));
PyList_SET_ITEM(py_retval, 2, libvirt_intWrap((int) info.cpus));
@@ -2952,7 +2970,12 @@ libvirt_virConnectListNetworks(PyObject *self ATTRIBUTE_UNUSED,
return VIR_PY_NONE;
}
}
- py_retval = PyList_New(c_retval);
+ if (!(py_retval = PyList_New(c_retval))) {
+ for (i = 0; i < c_retval; i++)
+ VIR_FREE(names[i]);
+ VIR_FREE(names);
+ return VIR_PY_NONE;
+ }
if (names) {
for (i = 0; i < c_retval; i++) {
@@ -2998,7 +3021,12 @@ libvirt_virConnectListDefinedNetworks(PyObject *self
ATTRIBUTE_UNUSED,
return VIR_PY_NONE;
}
}
- py_retval = PyList_New(c_retval);
+ if (!(py_retval = PyList_New(c_retval))) {
+ for (i = 0; i < c_retval; i++)
+ VIR_FREE(names[i]);
+ VIR_FREE(names);
+ return VIR_PY_NONE;
+ }
if (names) {
for (i = 0; i < c_retval; i++) {
@@ -3207,11 +3235,14 @@ libvirt_virNodeGetCellsFreeMemory(PyObject *self ATTRIBUTE_UNUSED,
PyObject *arg
VIR_FREE(freeMems);
return VIR_PY_NONE;
}
- py_retval = PyList_New(c_retval);
+ if (!(py_retval = PyList_New(c_retval)))
+ goto cleanup;
+
for (i = 0; i < c_retval; i++) {
PyList_SET_ITEM(py_retval, i,
libvirt_longlongWrap((long long) freeMems[i]));
}
+cleanup:
VIR_FREE(freeMems);
return py_retval;
}
@@ -3790,7 +3821,12 @@ libvirt_virNodeListDevices(PyObject *self ATTRIBUTE_UNUSED,
return VIR_PY_NONE;
}
}
- py_retval = PyList_New(c_retval);
+ if (!(py_retval = PyList_New(c_retval))) {
+ for (i = 0; i < c_retval; i++)
+ VIR_FREE(names[i]);
+ VIR_FREE(names);
+ return VIR_PY_NONE;
+ }
if (names) {
for (i = 0; i < c_retval; i++) {
@@ -3880,7 +3916,12 @@ libvirt_virNodeDeviceListCaps(PyObject *self ATTRIBUTE_UNUSED,
return VIR_PY_NONE;
}
}
- py_retval = PyList_New(c_retval);
+ if (!(py_retval = PyList_New(c_retval))) {
+ for (i = 0; i < c_retval; i++)
+ VIR_FREE(names[i]);
+ VIR_FREE(names);
+ return VIR_PY_NONE;
+ }
if (names) {
for (i = 0; i < c_retval; i++) {
@@ -4000,7 +4041,12 @@ libvirt_virConnectListSecrets(PyObject *self ATTRIBUTE_UNUSED,
return VIR_PY_NONE;
}
}
- py_retval = PyList_New(c_retval);
+ if (!(py_retval = PyList_New(c_retval))) {
+ for (i = 0; i < c_retval; i++)
+ VIR_FREE(uuids[i]);
+ VIR_FREE(uuids);
+ return VIR_PY_NONE;
+ }
if (uuids) {
for (i = 0; i < c_retval; i++) {
@@ -4219,7 +4265,12 @@ libvirt_virConnectListNWFilters(PyObject *self ATTRIBUTE_UNUSED,
return VIR_PY_NONE;
}
}
- py_retval = PyList_New(c_retval);
+ if (!(py_retval = PyList_New(c_retval))) {
+ for (i = 0; i < c_retval; i++)
+ VIR_FREE(uuids[i]);
+ VIR_FREE(uuids);
+ return VIR_PY_NONE;
+ }
if (uuids) {
for (i = 0; i < c_retval; i++) {
@@ -4502,7 +4553,8 @@ libvirt_virDomainGetJobInfo(PyObject *self ATTRIBUTE_UNUSED,
PyObject *args) {
LIBVIRT_END_ALLOW_THREADS;
if (c_retval < 0)
return VIR_PY_NONE;
- py_retval = PyList_New(12);
+ if (!(py_retval = PyList_New(12)))
+ return VIR_PY_NONE;
PyList_SET_ITEM(py_retval, 0, libvirt_intWrap((int) info.type));
PyList_SET_ITEM(py_retval, 1, libvirt_ulonglongWrap(info.timeElapsed));
PyList_SET_ITEM(py_retval, 2, libvirt_ulonglongWrap(info.timeRemaining));
--
1.8.3.1