diff options
author | Joseph Eagar <joeedh@gmail.com> | 2008-02-23 05:12:50 +0300 |
---|---|---|
committer | Joseph Eagar <joeedh@gmail.com> | 2008-02-23 05:12:50 +0300 |
commit | f312611a924304bf7048abbb9f5a4dc7895a9c7f (patch) | |
tree | 8265fbc31fd74c146c3f249fcdc6ba2f01e07752 /source/blender/python | |
parent | 0e233b3213a21449399d91b9ee841c235fbba4d7 (diff) |
=ID Property Bugfix=
There was an extraneous line causing ID property groups
to have the wrong length, causing crashes in code that
relied on it.
This commit both fixes that and adds a version check to
fix group lengths for older .blends. The subversion
was incremented to 15 for this change.
Diffstat (limited to 'source/blender/python')
-rw-r--r-- | source/blender/python/api2_2x/IDProp.c | 44 |
1 files changed, 41 insertions, 3 deletions
diff --git a/source/blender/python/api2_2x/IDProp.c b/source/blender/python/api2_2x/IDProp.c index cf5cf42de5d..3358b06d30b 100644 --- a/source/blender/python/api2_2x/IDProp.c +++ b/source/blender/python/api2_2x/IDProp.c @@ -433,7 +433,7 @@ PyObject *BPy_IDGroup_GetKeys(BPy_IDProperty *self) { PyObject *seq = PyList_New(self->prop->len); IDProperty *loop; - int i; + int i, j; if (!seq) return EXPP_ReturnPyObjError( PyExc_RuntimeError, @@ -442,6 +442,25 @@ PyObject *BPy_IDGroup_GetKeys(BPy_IDProperty *self) for (i=0, loop=self->prop->data.group.first; loop; loop=loop->next, i++) PyList_SetItem(seq, i, PyString_FromString(loop->name)); + if (i != self->prop->len) { + printf("ID Property Error found and corrected in BPy_IDGroup_GetKeys!\n"); + + /*fill rest of list with valid references to None*/ + for (j=i; j<self->prop->len; j++) { + Py_INCREF(Py_None); + PyList_SetItem(seq, j, Py_None); + } + + /*set correct group length*/ + self->prop->len = i; + + /*free the old list*/ + Py_DECREF(seq); + + /*call self again*/ + return BPy_IDGroup_GetKeys(self); + } + return seq; } @@ -449,7 +468,7 @@ PyObject *BPy_IDGroup_GetValues(BPy_IDProperty *self) { PyObject *seq = PyList_New(self->prop->len); IDProperty *loop; - int i; + int i, j; if (!seq) return EXPP_ReturnPyObjError( PyExc_RuntimeError, @@ -458,7 +477,26 @@ PyObject *BPy_IDGroup_GetValues(BPy_IDProperty *self) for (i=0, loop=self->prop->data.group.first; loop; loop=loop->next, i++) { PyList_SetItem(seq, i, BPy_IDGroup_WrapData(self->id, loop)); } - + + if (i != self->prop->len) { + printf("ID Property Error found and corrected in BPy_IDGroup_GetValues!\n"); + + /*fill rest of list with valid references to None*/ + for (j=i; j<self->prop->len; j++) { + Py_INCREF(Py_None); + PyList_SetItem(seq, j, Py_None); + } + + /*set correct group length*/ + self->prop->len = i; + + /*free the old list*/ + Py_DECREF(seq); + + /*call self again*/ + return BPy_IDGroup_GetValues(self); + } + return seq; } |