[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [50917] trunk/blender/source/blender/ editors/sculpt_paint/sculpt_undo.c: minor change for sculpt undo, was getting the derived-mesh before calling sculpt_update_mesh_elements().

Campbell Barton ideasman42 at gmail.com
Thu Sep 27 00:09:58 CEST 2012


Revision: 50917
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50917
Author:   campbellbarton
Date:     2012-09-26 22:09:56 +0000 (Wed, 26 Sep 2012)
Log Message:
-----------
minor change for sculpt undo, was getting the derived-mesh before calling sculpt_update_mesh_elements().
also add NULL check for BKE_key_from_object(), to avoid unlikely but possible NULL pointer dereference.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/sculpt_paint/sculpt_undo.c

Modified: trunk/blender/source/blender/editors/sculpt_paint/sculpt_undo.c
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/sculpt_undo.c	2012-09-26 21:19:51 UTC (rev 50916)
+++ trunk/blender/source/blender/editors/sculpt_paint/sculpt_undo.c	2012-09-26 22:09:56 UTC (rev 50917)
@@ -108,7 +108,7 @@
 			/* shape key has been changed before calling undo operator */
 
 			Key *key = BKE_key_from_object(ob);
-			KeyBlock *kb = BKE_keyblock_find_name(key, unode->shapeName);
+			KeyBlock *kb = key ? BKE_keyblock_find_name(key, unode->shapeName) : NULL;
 
 			if (kb) {
 				ob->shapenr = BLI_findindex(&key->block, kb) + 1;
@@ -266,13 +266,15 @@
 	Scene *scene = CTX_data_scene(C);
 	Sculpt *sd = CTX_data_tool_settings(C)->sculpt;
 	Object *ob = CTX_data_active_object(C);
-	DerivedMesh *dm = mesh_get_derived_final(scene, ob, 0);
+	DerivedMesh *dm;
 	SculptSession *ss = ob->sculpt;
 	SculptUndoNode *unode;
 	MultiresModifierData *mmd;
 	int update = FALSE, rebuild = FALSE;
 
 	sculpt_update_mesh_elements(scene, sd, ob, 0);
+	/* call _after_ sculpt_update_mesh_elements() which may update 'ob->derivedFinal' */
+	dm = mesh_get_derived_final(scene, ob, 0);
 
 	for (unode = lb->first; unode; unode = unode->next) {
 		if (!(strcmp(unode->idname, ob->id.name) == 0))




More information about the Bf-blender-cvs mailing list