Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2018-06-12 18:34:44 +0300
committerCampbell Barton <ideasman42@gmail.com>2018-06-12 18:34:44 +0300
commitb00d84035989d3cef3417ee4f2ca8475c6c2b57a (patch)
tree39c0bb3779dc2234ece59f622f7650f090c55acd /source/blender/python/intern/bpy_rna_callback.c
parent760e79d8092a121b9d0e1cd02019478c808acae9 (diff)
WM: remove sloppy region type access
Avoid accidentally operating on the wrong region type.
Diffstat (limited to 'source/blender/python/intern/bpy_rna_callback.c')
-rw-r--r--source/blender/python/intern/bpy_rna_callback.c34
1 files changed, 26 insertions, 8 deletions
diff --git a/source/blender/python/intern/bpy_rna_callback.c b/source/blender/python/intern/bpy_rna_callback.c
index 0a7e9c3b4c9..fbdcc03ddd0 100644
--- a/source/blender/python/intern/bpy_rna_callback.c
+++ b/source/blender/python/intern/bpy_rna_callback.c
@@ -101,7 +101,10 @@ PyObject *pyrna_callback_add(BPy_StructRNA *self, PyObject *args)
if (RNA_struct_is_a(self->ptr.type, &RNA_Region)) {
if (cb_event_str) {
- if (pyrna_enum_value_from_id(region_draw_mode_items, cb_event_str, &cb_event, "bpy_struct.callback_add()") == -1) {
+ if (pyrna_enum_value_from_id(
+ region_draw_mode_items, cb_event_str,
+ &cb_event, "bpy_struct.callback_add()") == -1)
+ {
return NULL;
}
}
@@ -212,10 +215,16 @@ PyObject *pyrna_callback_classmethod_add(PyObject *UNUSED(self), PyObject *args)
return NULL;
}
- if (pyrna_enum_value_from_id(region_draw_mode_items, cb_event_str, &cb_event, "bpy_struct.callback_add()") == -1) {
+ if (pyrna_enum_value_from_id(
+ region_draw_mode_items, cb_event_str,
+ &cb_event, "bpy_struct.callback_add()") == -1)
+ {
return NULL;
}
- else if (pyrna_enum_value_from_id(rna_enum_region_type_items, cb_regiontype_str, &cb_regiontype, "bpy_struct.callback_add()") == -1) {
+ else if (pyrna_enum_value_from_id(
+ rna_enum_region_type_items, cb_regiontype_str,
+ &cb_regiontype, "bpy_struct.callback_add()") == -1)
+ {
return NULL;
}
else {
@@ -226,8 +235,11 @@ PyObject *pyrna_callback_classmethod_add(PyObject *UNUSED(self), PyObject *args)
}
else {
SpaceType *st = BKE_spacetype_from_id(spaceid);
- ARegionType *art = BKE_regiontype_from_id_or_first(st, cb_regiontype);
-
+ ARegionType *art = BKE_regiontype_from_id(st, cb_regiontype);
+ if (art == NULL) {
+ PyErr_Format(PyExc_TypeError, "region type '%.200s' not in space", cb_regiontype_str);
+ return NULL;
+ }
handle = ED_region_draw_cb_activate(art, cb_region_draw, (void *)args, cb_event);
Py_INCREF(args);
}
@@ -278,7 +290,10 @@ PyObject *pyrna_callback_classmethod_remove(PyObject *UNUSED(self), PyObject *ar
customdata = ED_region_draw_cb_customdata(handle);
Py_DECREF((PyObject *)customdata);
- if (pyrna_enum_value_from_id(rna_enum_region_type_items, cb_regiontype_str, &cb_regiontype, "bpy_struct.callback_remove()") == -1) {
+ if (pyrna_enum_value_from_id(
+ rna_enum_region_type_items, cb_regiontype_str,
+ &cb_regiontype, "bpy_struct.callback_remove()") == -1)
+ {
return NULL;
}
else {
@@ -289,8 +304,11 @@ PyObject *pyrna_callback_classmethod_remove(PyObject *UNUSED(self), PyObject *ar
}
else {
SpaceType *st = BKE_spacetype_from_id(spaceid);
- ARegionType *art = BKE_regiontype_from_id_or_first(st, cb_regiontype);
-
+ ARegionType *art = BKE_regiontype_from_id(st, cb_regiontype);
+ if (art == NULL) {
+ PyErr_Format(PyExc_TypeError, "region type '%.200s' not in space", cb_regiontype_str);
+ return NULL;
+ }
ED_region_draw_cb_exit(art, handle);
}
}