diff options
author | Campbell Barton <ideasman42@gmail.com> | 2010-01-03 07:35:51 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2010-01-03 07:35:51 +0300 |
commit | bf6fc751612c6a1ecef0573761a61daab9dc2983 (patch) | |
tree | de778b6771f6d207da2348835a55ebcb32fb345f | |
parent | eb7ac3146e1cee6c1246c3772e11538c253559a0 (diff) |
freeing particle modifier would access freed memory (only to tak the psys to be deleted), set to NULL after freeing and check before tagging.
-rw-r--r-- | source/blender/blenkernel/intern/modifier.c | 5 | ||||
-rw-r--r-- | source/blender/editors/object/object_modifier.c | 1 |
2 files changed, 5 insertions, 1 deletions
diff --git a/source/blender/blenkernel/intern/modifier.c b/source/blender/blenkernel/intern/modifier.c index e0640a76f43..79fc117b4de 100644 --- a/source/blender/blenkernel/intern/modifier.c +++ b/source/blender/blenkernel/intern/modifier.c @@ -6866,7 +6866,10 @@ static void particleSystemModifier_freeData(ModifierData *md) psmd->dm=0; } - psmd->psys->flag |= PSYS_DELETE; + /* ED_object_modifier_remove may have freed this first before calling + * modifier_free (which calls this function) */ + if(psmd->psys) + psmd->psys->flag |= PSYS_DELETE; } static void particleSystemModifier_copyData(ModifierData *md, ModifierData *target) { diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c index 3e9b1cfe7c7..a44ad47b94f 100644 --- a/source/blender/editors/object/object_modifier.c +++ b/source/blender/editors/object/object_modifier.c @@ -165,6 +165,7 @@ int ED_object_modifier_remove(ReportList *reports, Scene *scene, Object *ob, Mod BLI_remlink(&ob->particlesystem, psmd->psys); psys_free(ob, psmd->psys); + psmd->psys= NULL; } else if(md->type == eModifierType_Softbody) { if(ob->soft) { |