diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2012-03-14 18:09:56 +0400 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2012-03-14 18:09:56 +0400 |
commit | 930f43bd96b6ec48e202bfb7b4d62731e9d10bfc (patch) | |
tree | 58fe7cb11d7bc87f08f0ee32ea68a3082bf681b9 /source/blender/blenkernel | |
parent | a829a905dafda5b23e1bd6c5e67e9093b0018aa3 (diff) |
Fix crash on edge extrude from textured view
Issue was caused by MFACE layer adding for even DM without tessellated faces
which lead to adding new layer but with NULL data. This causes issues when layer
with faces (after extrude) was attempting to add because currently CD only checks
if layer type exists but does not check for size of the layer.
Solved by not adding MFACE layer if there's no tessellated faces.
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/intern/DerivedMesh.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c index 66cd8adc60b..52d0161969b 100644 --- a/source/blender/blenkernel/intern/DerivedMesh.c +++ b/source/blender/blenkernel/intern/DerivedMesh.c @@ -119,8 +119,17 @@ static MFace *dm_getTessFaceArray(DerivedMesh *dm) MFace *mface = CustomData_get_layer(&dm->faceData, CD_MFACE); if (!mface) { - mface = CustomData_add_layer(&dm->faceData, CD_MFACE, CD_CALLOC, NULL, - dm->getNumTessFaces(dm)); + int numTessFaces = dm->getNumTessFaces(dm); + + if (!numTessFaces) { + /* Do not add layer if there's no elements in it, this leads to issues later when + * this layer is needed with non-zero size, but currently CD stuff does not check + * for requested layer size on creation and just returns layer which was previously + * added (sergey) */ + return NULL; + } + + mface = CustomData_add_layer(&dm->faceData, CD_MFACE, CD_CALLOC, NULL, numTessFaces); CustomData_set_layer_flag(&dm->faceData, CD_MFACE, CD_FLAG_TEMPORARY); dm->copyTessFaceArray(dm, mface); } |