[Bf-blender-cvs] [02f4d63dcc7] blender-v3.1-release: Fix broken shapekeys: check for 'NULL' `from` pointer too.

Bastien Montagne noreply at git.blender.org
Fri Feb 18 12:42:43 CET 2022


Commit: 02f4d63dcc7b74fbacfb4e5bcdd01766563573f5
Author: Bastien Montagne
Date:   Fri Feb 18 12:11:59 2022 +0100
Branches: blender-v3.1-release
https://developer.blender.org/rB02f4d63dcc7b74fbacfb4e5bcdd01766563573f5

Fix broken shapekeys: check for 'NULL' `from` pointer too.

Add check for `NULL` `from` pointer to `BLO_main_validate_shapekeys`,
and delete these shapekeys, as they are fully invalid and impossible to
recover.

Found in a studio production file (`animation
test/snow_parkour/shots/0040/0040.lighting.blend`, svn rev `1111`).
Would be nice to know how this was generated too...

===================================================================

M	source/blender/blenloader/intern/blend_validate.c

===================================================================

diff --git a/source/blender/blenloader/intern/blend_validate.c b/source/blender/blenloader/intern/blend_validate.c
index 333f6e341c6..c8dd27f0c9c 100644
--- a/source/blender/blenloader/intern/blend_validate.c
+++ b/source/blender/blenloader/intern/blend_validate.c
@@ -195,5 +195,20 @@ bool BLO_main_validate_shapekeys(Main *bmain, ReportList *reports)
 
   BKE_main_unlock(bmain);
 
+  /* NOTE: #BKE_id_delete also locks `bmain`, so we need to do this loop outside of the lock here.
+   */
+  LISTBASE_FOREACH_MUTABLE (Key *, shapekey, &bmain->shapekeys) {
+    if (shapekey->from != NULL) {
+      continue;
+    }
+
+    BKE_reportf(reports,
+                RPT_ERROR,
+                "Shapekey %s has an invalid 'from' pointer (%p), it will be deleted",
+                shapekey->id.name,
+                shapekey->from);
+    BKE_id_delete(bmain, shapekey);
+  }
+
   return is_valid;
 }



More information about the Bf-blender-cvs mailing list