[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [45986] trunk/blender/source/blender/ python/bmesh/bmesh_py_types_customdata.c: fix [#31113] bmesh.types. BMLayerCollection getter calculate key indices wrong (own fault)
Campbell Barton
ideasman42 at gmail.com
Thu Apr 26 18:32:31 CEST 2012
Revision: 45986
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=45986
Author: campbellbarton
Date: 2012-04-26 16:32:30 +0000 (Thu, 26 Apr 2012)
Log Message:
-----------
fix [#31113] bmesh.types.BMLayerCollection getter calculate key indices wrong (own fault)
also add check so layer.name won't crash incase the layer becomes invalid.
Modified Paths:
--------------
trunk/blender/source/blender/python/bmesh/bmesh_py_types_customdata.c
Modified: trunk/blender/source/blender/python/bmesh/bmesh_py_types_customdata.c
===================================================================
--- trunk/blender/source/blender/python/bmesh/bmesh_py_types_customdata.c 2012-04-26 15:38:16 UTC (rev 45985)
+++ trunk/blender/source/blender/python/bmesh/bmesh_py_types_customdata.c 2012-04-26 16:32:30 UTC (rev 45986)
@@ -63,7 +63,15 @@
static CustomDataLayer *bpy_bmlayeritem_get(BPy_BMLayerItem *self)
{
CustomData *data = bpy_bm_customdata_get(self->bm, self->htype);
- return &data->layers[CustomData_get_layer_index_n(data, self->type, self->index)];
+ const int index_absolute = CustomData_get_layer_index_n(data, self->type, self->index);
+ if (index_absolute != -1) {
+ return &data->layers[index_absolute];
+ }
+ else {
+ PyErr_SetString(PyExc_RuntimeError,
+ "layer has become invalid");
+ return NULL;
+ }
}
/* py-type definitions
@@ -126,9 +134,10 @@
BPY_BM_CHECK_OBJ(self);
data = bpy_bm_customdata_get(self->bm, self->htype);
- index = CustomData_get_active_layer_index(data, self->type);
+ index = CustomData_get_active_layer_index(data, self->type); /* absolute */
if (index != -1) {
+ index -= CustomData_get_layer_index(data, self->type); /* make relative */
return BPy_BMLayerItem_CreatePyObject(self->bm, self->htype, self->type, index);
}
else {
@@ -146,7 +155,12 @@
BPY_BM_CHECK_OBJ(self);
layer = bpy_bmlayeritem_get(self);
- return PyUnicode_FromString(layer->name);
+ if (layer) {
+ return PyUnicode_FromString(layer->name);
+ }
+ else {
+ return NULL;
+ }
}
static PyGetSetDef bpy_bmlayeraccess_vert_getseters[] = {
@@ -311,7 +325,7 @@
BPY_BM_CHECK_OBJ(self);
data = bpy_bm_customdata_get(self->bm, self->htype);
- index = CustomData_get_layer_index(data, self->type);
+ index = CustomData_get_layer_index(data, self->type); /* absolute, but no need to make relative */
ret = PyList_New(0);
@@ -426,9 +440,10 @@
int index;
data = bpy_bm_customdata_get(self->bm, self->htype);
- index = CustomData_get_named_layer_index(data, self->type, key);
+ index = CustomData_get_named_layer_index(data, self->type, key); /* absolute index */
if (index != -1) {
+ index -= CustomData_get_layer_index(data, self->type); /* make relative */
return BPy_BMLayerItem_CreatePyObject(self->bm, self->htype, self->type, index);
}
}
@@ -471,9 +486,10 @@
BPY_BM_CHECK_OBJ(self);
data = bpy_bm_customdata_get(self->bm, self->htype);
- index = CustomData_get_named_layer_index(data, self->type, keyname);
+ index = CustomData_get_named_layer_index(data, self->type, keyname); /* absolute */
if (index != -1) {
+ index -= CustomData_get_layer_index(data, self->type); /* make relative */
return BPy_BMLayerItem_CreatePyObject(self->bm, self->htype, self->type, index);
}
else {
More information about the Bf-blender-cvs
mailing list