Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Montagne <montagne29@wanadoo.fr>2014-03-04 12:09:38 +0400
committerBastien Montagne <montagne29@wanadoo.fr>2014-03-04 12:09:38 +0400
commitdad96000048cbc30e0d21c567668aaa32dece4dd (patch)
tree53d8c7c14f58dddfce12bf30aed1a4c01cc35c0a
parent13290d5a16b3496e1dcec1944563f4124696e034 (diff)
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...
-rw-r--r--source/blender/modifiers/intern/MOD_laplaciandeform.c34
1 files changed, 17 insertions, 17 deletions
diff --git a/source/blender/modifiers/intern/MOD_laplaciandeform.c b/source/blender/modifiers/intern/MOD_laplaciandeform.c
index fa56698e1dc..9ed99fc4aed 100644
--- a/source/blender/modifiers/intern/MOD_laplaciandeform.c
+++ b/source/blender/modifiers/intern/MOD_laplaciandeform.c
@@ -755,27 +755,27 @@ static void LaplacianDeformModifier_do(
}
}
else {
- if (lmd->total_verts > 0 && lmd->total_verts == numVerts) {
- if (isValidVertexGroup(lmd, ob, dm)) {
- filevertexCos = MEM_mallocN(sizeof(float[3]) * numVerts, "TempDeformCoordinates");
- memcpy(filevertexCos, lmd->vertexco, sizeof(float[3]) * numVerts);
- MEM_SAFE_FREE(lmd->vertexco);
- lmd->total_verts = 0;
- initSystem(lmd, ob, dm, filevertexCos, numVerts);
- sys = lmd->cache_system;
- MEM_SAFE_FREE(filevertexCos);
- laplacianDeformPreview(sys, vertexCos);
- }
+ 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");
+ memcpy(filevertexCos, lmd->vertexco, sizeof(float[3]) * numVerts);
+ MEM_SAFE_FREE(lmd->vertexco);
+ lmd->total_verts = 0;
+ initSystem(lmd, ob, dm, filevertexCos, numVerts);
+ sys = lmd->cache_system;
+ MEM_SAFE_FREE(filevertexCos);
+ laplacianDeformPreview(sys, vertexCos);
}
else {
- if (isValidVertexGroup(lmd, ob, dm)) {
- initSystem(lmd, ob, dm, vertexCos, numVerts);
- sys = lmd->cache_system;
- laplacianDeformPreview(sys, vertexCos);
- }
+ initSystem(lmd, ob, dm, vertexCos, numVerts);
+ sys = lmd->cache_system;
+ laplacianDeformPreview(sys, vertexCos);
}
}
- if (sys->is_matrix_computed && !sys->has_solution) {
+ if (sys && sys->is_matrix_computed && !sys->has_solution) {
modifier_setError(&lmd->modifier, "The system did not find a solution");
}
}