[Bf-blender-cvs] [1fcdb1ea28e] blender-v3.2-release: Fix (unreported) crash in some rare case when making liboverride.

Bastien Montagne noreply at git.blender.org
Wed May 18 10:43:05 CEST 2022


Commit: 1fcdb1ea28eb995f7c373393e3838a12615c10af
Author: Bastien Montagne
Date:   Wed May 18 10:41:01 2022 +0200
Branches: blender-v3.2-release
https://developer.blender.org/rB1fcdb1ea28eb995f7c373393e3838a12615c10af

Fix (unreported) crash in some rare case when making liboverride.

If making liboverride of an empty collection, this (root of override
hierarchy) collection would get untagged in code when checking for
collections that do not need to be overridden, leading to not overriding
this root collection, and later in code to using NULL pointer.

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

M	source/blender/blenkernel/intern/lib_override.c

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

diff --git a/source/blender/blenkernel/intern/lib_override.c b/source/blender/blenkernel/intern/lib_override.c
index 67df6b5527e..b83d30a27bf 100644
--- a/source/blender/blenkernel/intern/lib_override.c
+++ b/source/blender/blenkernel/intern/lib_override.c
@@ -757,13 +757,14 @@ static bool lib_override_linked_group_tag_collections_keep_tagged_check_recursiv
 static void lib_override_linked_group_tag_clear_boneshapes_objects(LibOverrideGroupTagData *data)
 {
   Main *bmain = data->bmain;
+  ID *id_root = data->id_root;
 
   /* Remove (untag) bone shape objects, they shall never need to be to directly/explicitly
    * overridden. */
   LISTBASE_FOREACH (Object *, ob, &bmain->objects) {
     if (ob->type == OB_ARMATURE && ob->pose != NULL && (ob->id.tag & data->tag)) {
       for (bPoseChannel *pchan = ob->pose->chanbase.first; pchan != NULL; pchan = pchan->next) {
-        if (pchan->custom != NULL) {
+        if (pchan->custom != NULL && &pchan->custom->id != id_root) {
           pchan->custom->id.tag &= ~data->tag;
         }
       }
@@ -773,7 +774,7 @@ static void lib_override_linked_group_tag_clear_boneshapes_objects(LibOverrideGr
   /* Remove (untag) collections if they do not own any tagged object (either themselves, or in
    * their children collections). */
   LISTBASE_FOREACH (Collection *, collection, &bmain->collections) {
-    if ((collection->id.tag & data->tag) == 0) {
+    if ((collection->id.tag & data->tag) == 0 || &collection->id == id_root) {
       continue;
     }



More information about the Bf-blender-cvs mailing list