[Bf-blender-cvs] [e97ab83] master: PyAPI: fix leak in unlikely case converting idprops fail

Campbell Barton noreply at git.blender.org
Sun Jul 31 09:24:28 CEST 2016


Commit: e97ab8347a16f84bdddeaf53305cd9a7f42860ab
Author: Campbell Barton
Date:   Sun Jul 31 16:59:08 2016 +1000
Branches: master
https://developer.blender.org/rBe97ab8347a16f84bdddeaf53305cd9a7f42860ab

PyAPI: fix leak in unlikely case converting idprops fail

===================================================================

M	source/blender/python/generic/idprop_py_api.c

===================================================================

diff --git a/source/blender/python/generic/idprop_py_api.c b/source/blender/python/generic/idprop_py_api.c
index c978ae5..2f8afdf 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);




More information about the Bf-blender-cvs mailing list