From 13ec0cd6c3c74c7f324cefff064bb725cc26fcd2 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Wed, 3 Apr 2013 13:43:12 +0000 Subject: Fix #34856: crash passing an object rather than a mesh to bpy.data.mesh.remove(), this should give an error message but it didn't. --- source/blender/makesrna/intern/rna_access.c | 3 +++ source/blender/python/intern/bpy_rna.c | 8 ++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) (limited to 'source') diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c index 68a5ac5f639..00ee1b49da2 100644 --- a/source/blender/makesrna/intern/rna_access.c +++ b/source/blender/makesrna/intern/rna_access.c @@ -609,6 +609,9 @@ bool RNA_struct_is_a(StructRNA *type, StructRNA *srna) { StructRNA *base; + if (srna == &RNA_AnyType) + return true; + if (!type) return false; diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c index 735df7aeb10..d6a82ce43ea 100644 --- a/source/blender/python/intern/bpy_rna.c +++ b/source/blender/python/intern/bpy_rna.c @@ -1778,8 +1778,10 @@ static int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyOb if (flag & PROP_THICK_WRAP) { if (value == Py_None) memset(data, 0, sizeof(PointerRNA)); - else + else if (RNA_struct_is_a(param->ptr.type, ptr_type)) *((PointerRNA *)data) = param->ptr; + else + raise_error = true; } else { /* for function calls, we sometimes want to pass the 'ptr' directly, @@ -1787,8 +1789,10 @@ static int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyOb BLI_assert(value_new == NULL); if (value == Py_None) *((void **)data) = NULL; - else + else if (RNA_struct_is_a(param->ptr.type, ptr_type)) *((PointerRNA **)data) = ¶m->ptr; + else + raise_error = true; } } else if (value == Py_None) { -- cgit v1.2.3