diff options
Diffstat (limited to 'source/blender/python/intern/bpy_rna_array.c')
-rw-r--r-- | source/blender/python/intern/bpy_rna_array.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/source/blender/python/intern/bpy_rna_array.c b/source/blender/python/intern/bpy_rna_array.c index 4d7fe5906c9..5e4291dff96 100644 --- a/source/blender/python/intern/bpy_rna_array.c +++ b/source/blender/python/intern/bpy_rna_array.c @@ -21,12 +21,21 @@ * * ***** END GPL LICENSE BLOCK ***** */ + +/** \file blender/python/intern/bpy_rna_array.c + * \ingroup pythonintern + */ + #include <Python.h> +#include "RNA_types.h" + #include "bpy_rna.h" #include "BKE_global.h" #include "MEM_guardedalloc.h" +#include "RNA_access.h" + #define MAX_ARRAY_DIMENSION 10 typedef void (*ItemConvertFunc)(PyObject *, char *); @@ -58,6 +67,10 @@ static int validate_array_type(PyObject *seq, int dim, int totdim, int dimsize[] if (dim + 1 < totdim) { /* check that a sequence contains dimsize[dim] items */ const int seq_size= PySequence_Size(seq); + if(seq_size == -1) { + PyErr_Format(PyExc_ValueError, "%s sequence expected at dimension %d, not %s", error_prefix, (int)dim + 1, Py_TYPE(seq)->tp_name); + return 0; + } for (i= 0; i < seq_size; i++) { PyObject *item; int ok= 1; @@ -91,6 +104,10 @@ static int validate_array_type(PyObject *seq, int dim, int totdim, int dimsize[] else { /* check that items are of correct type */ const int seq_size= PySequence_Size(seq); + if(seq_size == -1) { + PyErr_Format(PyExc_ValueError, "%s sequence expected at dimension %d, not %s", error_prefix, (int)dim + 1, Py_TYPE(seq)->tp_name); + return 0; + } for (i= 0; i < seq_size; i++) { PyObject *item= PySequence_GetItem(seq, i); @@ -233,6 +250,8 @@ static char *copy_values(PyObject *seq, PointerRNA *ptr, PropertyRNA *prop, int int totdim= RNA_property_array_dimension(ptr, prop, NULL); const int seq_size= PySequence_Size(seq); + assert(seq_size != -1); + for (i= 0; i < seq_size; i++) { PyObject *item= PySequence_GetItem(seq, i); |