[Bf-blender-cvs] [1414c4496cc] master: ID Management Py API: Fix (unreported) crash in some cases.

Bastien Montagne noreply at git.blender.org
Mon Feb 18 17:17:02 CET 2019


Commit: 1414c4496cc492320ec5076fe17cfb8e89df6a01
Author: Bastien Montagne
Date:   Mon Feb 18 16:55:32 2019 +0100
Branches: master
https://developer.blender.org/rB1414c4496cc492320ec5076fe17cfb8e89df6a01

ID Management Py API: Fix (unreported) crash in some cases.

Would crash when passing some kind of invalid parameters, e.g.:

   >>>D.user_map(key_types={'brush'})

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

M	source/blender/python/intern/bpy_rna_id_collection.c

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

diff --git a/source/blender/python/intern/bpy_rna_id_collection.c b/source/blender/python/intern/bpy_rna_id_collection.c
index 5f18a64a8a2..72c808aa630 100644
--- a/source/blender/python/intern/bpy_rna_id_collection.c
+++ b/source/blender/python/intern/bpy_rna_id_collection.c
@@ -170,6 +170,8 @@ static PyObject *bpy_user_map(PyObject *UNUSED(self), PyObject *args, PyObject *
 
 	PyObject *ret = NULL;
 
+	IDUserMapData data_cb = {NULL};
+
 	static const char *_keywords[] = {"subset", "key_types", "value_types", NULL};
 	static _PyArg_Parser _parser = {"|O$O!O!:user_map", _keywords, 0};
 	if (!_PyArg_ParseTupleAndKeywordsFast(
@@ -197,8 +199,6 @@ static PyObject *bpy_user_map(PyObject *UNUSED(self), PyObject *args, PyObject *
 		}
 	}
 
-	IDUserMapData data_cb = {NULL};
-
 	if (subset) {
 		PyObject *subset_fast = PySequence_Fast(subset, "user_map");
 		if (subset_fast == NULL) {
@@ -268,13 +268,15 @@ static PyObject *bpy_user_map(PyObject *UNUSED(self), PyObject *args, PyObject *
 	ret = data_cb.user_map;
 
 error:
-	Py_XDECREF(data_cb.py_id_key_lookup_only);
+	if (data_cb.py_id_key_lookup_only != NULL) {
+		Py_XDECREF(data_cb.py_id_key_lookup_only);
+	}
 
-	if (key_types_bitmap) {
+	if (key_types_bitmap != NULL) {
 		MEM_freeN(key_types_bitmap);
 	}
 
-	if (val_types_bitmap) {
+	if (val_types_bitmap != NULL) {
 		MEM_freeN(val_types_bitmap);
 	}



More information about the Bf-blender-cvs mailing list