diff options
author | Campbell Barton <ideasman42@gmail.com> | 2016-07-31 09:59:08 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2016-07-31 09:59:08 +0300 |
commit | e97ab8347a16f84bdddeaf53305cd9a7f42860ab (patch) | |
tree | 6b2e79ac1cf221bc036f0588e50fa6187003941e /source/blender/python/generic/idprop_py_api.c | |
parent | 2dfc954c4a552f80f8e944c3b6a1a7b6995427a2 (diff) |
PyAPI: fix leak in unlikely case converting idprops fail
Diffstat (limited to 'source/blender/python/generic/idprop_py_api.c')
-rw-r--r-- | source/blender/python/generic/idprop_py_api.c | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/source/blender/python/generic/idprop_py_api.c b/source/blender/python/generic/idprop_py_api.c index c978ae55ea6..2f8afdf1ed1 100644 --- a/source/blender/python/generic/idprop_py_api.c +++ b/source/blender/python/generic/idprop_py_api.c @@ -98,7 +98,7 @@ static PyObject *idprop_py_from_idp_array(ID *id, IDProperty *prop) static PyObject *idprop_py_from_idp_idparray(ID *id, IDProperty *prop) { - PyObject *seq = PyList_New(prop->len), *wrap; + PyObject *seq = PyList_New(prop->len); IDProperty *array = IDP_IDPArray(prop); int i; @@ -110,10 +110,13 @@ static PyObject *idprop_py_from_idp_idparray(ID *id, IDProperty *prop) } for (i = 0; i < prop->len; i++) { - wrap = BPy_IDGroup_WrapData(id, array++, prop); + PyObject *wrap = BPy_IDGroup_WrapData(id, array++, prop); - if (!wrap) /* BPy_IDGroup_MapDataToPy sets the error */ + /* BPy_IDGroup_MapDataToPy sets the error */ + if (UNLIKELY(wrap == NULL)) { + Py_DECREF(seq); return NULL; + } PyList_SET_ITEM(seq, i, wrap); } @@ -659,7 +662,7 @@ static PyObject *BPy_IDGroup_MapDataToPy(IDProperty *prop) } case IDP_IDPARRAY: { - PyObject *seq = PyList_New(prop->len), *wrap; + PyObject *seq = PyList_New(prop->len); IDProperty *array = IDP_IDPArray(prop); int i; @@ -671,10 +674,13 @@ static PyObject *BPy_IDGroup_MapDataToPy(IDProperty *prop) } for (i = 0; i < prop->len; i++) { - wrap = BPy_IDGroup_MapDataToPy(array++); + PyObject *wrap = BPy_IDGroup_MapDataToPy(array++); - if (!wrap) /* BPy_IDGroup_MapDataToPy sets the error */ + /* BPy_IDGroup_MapDataToPy sets the error */ + if (UNLIKELY(wrap == NULL)) { + Py_DECREF(seq); return NULL; + } PyList_SET_ITEM(seq, i, wrap); } @@ -682,14 +688,17 @@ static PyObject *BPy_IDGroup_MapDataToPy(IDProperty *prop) } case IDP_GROUP: { - PyObject *dict = PyDict_New(), *wrap; + PyObject *dict = PyDict_New(); IDProperty *loop; for (loop = prop->data.group.first; loop; loop = loop->next) { - wrap = BPy_IDGroup_MapDataToPy(loop); + PyObject *wrap = BPy_IDGroup_MapDataToPy(loop); - if (!wrap) /* BPy_IDGroup_MapDataToPy sets the error */ + /* BPy_IDGroup_MapDataToPy sets the error */ + if (UNLIKELY(wrap == NULL)) { + Py_DECREF(dict); return NULL; + } PyDict_SetItemString(dict, loop->name, wrap); Py_DECREF(wrap); |