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 <bastien@blender.org>2022-05-18 11:41:01 +0300
committerBastien Montagne <bastien@blender.org>2022-05-18 11:41:01 +0300
commit1fcdb1ea28eb995f7c373393e3838a12615c10af (patch)
tree0194bfe558c04d74f158ae3f1dac3bd3b729f185
parenta820ba0d36a05453af4e49b402dd6e893d28ecca (diff)
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.
-rw-r--r--source/blender/blenkernel/intern/lib_override.c5
1 files changed, 3 insertions, 2 deletions
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;
}