Fix T38941: Laplacian Deform crashes on OSX

When vgroup was invalid somehow (e.g. empty, as in this case) and bind could not happen, code was dereferencing a NULL pointer...
This commit is contained in:
Bastien Montagne
2014-03-04 09:09:38 +01:00
parent 13290d5a16
commit dad9600004

View File

@@ -755,8 +755,11 @@ static void LaplacianDeformModifier_do(
} }
} }
else { else {
if (lmd->total_verts > 0 && lmd->total_verts == numVerts) { if (!isValidVertexGroup(lmd, ob, dm)) {
if (isValidVertexGroup(lmd, ob, dm)) { modifier_setError(&lmd->modifier, "Vertex group '%s' is not valid", lmd->anchor_grp_name);
lmd->flag &= ~MOD_LAPLACIANDEFORM_BIND;
}
else if (lmd->total_verts > 0 && lmd->total_verts == numVerts) {
filevertexCos = MEM_mallocN(sizeof(float[3]) * numVerts, "TempDeformCoordinates"); filevertexCos = MEM_mallocN(sizeof(float[3]) * numVerts, "TempDeformCoordinates");
memcpy(filevertexCos, lmd->vertexco, sizeof(float[3]) * numVerts); memcpy(filevertexCos, lmd->vertexco, sizeof(float[3]) * numVerts);
MEM_SAFE_FREE(lmd->vertexco); MEM_SAFE_FREE(lmd->vertexco);
@@ -766,16 +769,13 @@ static void LaplacianDeformModifier_do(
MEM_SAFE_FREE(filevertexCos); MEM_SAFE_FREE(filevertexCos);
laplacianDeformPreview(sys, vertexCos); laplacianDeformPreview(sys, vertexCos);
} }
}
else { else {
if (isValidVertexGroup(lmd, ob, dm)) {
initSystem(lmd, ob, dm, vertexCos, numVerts); initSystem(lmd, ob, dm, vertexCos, numVerts);
sys = lmd->cache_system; sys = lmd->cache_system;
laplacianDeformPreview(sys, vertexCos); laplacianDeformPreview(sys, vertexCos);
} }
} }
} if (sys && sys->is_matrix_computed && !sys->has_solution) {
if (sys->is_matrix_computed && !sys->has_solution) {
modifier_setError(&lmd->modifier, "The system did not find a solution"); modifier_setError(&lmd->modifier, "The system did not find a solution");
} }
} }