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>2020-08-27 16:48:01 +0300
committerJeroen Bakker <jeroen@blender.org>2020-09-02 15:56:20 +0300
commitcbb5201f09bd88a5c7e58fe74ee4178fb2aec27f (patch)
treeeb671330636683159164078c2f7903228d1d527f
parent812c234377302fdcb6b6bf8c7715507f9831525f (diff)
Fix T80104: Crash on making material local.
Problem is again with the embedded data, we want to make those local together with their owner ID, but sometimes we are actually dealing with copies here, which are inheritently already local. Code did not considered that possibility before, leading to access to a NULL `lib` pointer. This should also be back-ported to 2.83 LTS release. Maniphest Tasks: T80104 Differential Revision: https://developer.blender.org/D8731
-rw-r--r--source/blender/blenkernel/intern/lib_id.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/source/blender/blenkernel/intern/lib_id.c b/source/blender/blenkernel/intern/lib_id.c
index 18c72e2a324..fcdc28d3acd 100644
--- a/source/blender/blenkernel/intern/lib_id.c
+++ b/source/blender/blenkernel/intern/lib_id.c
@@ -396,8 +396,11 @@ static int lib_id_expand_local_cb(LibraryIDLinkCallbackData *cb_data)
}
if (cb_flag & IDWALK_CB_EMBEDDED) {
- /* Embedded data-blocks need to be made fully local as well. */
- if (*id_pointer != NULL) {
+ /* Embedded data-blocks need to be made fully local as well.
+ * Note however that in some cases (when owner ID had to be duplicated instead of being made
+ * local directly), its embedded IDs should also have already been duplicated, and hence be
+ * fully local here already. */
+ if (*id_pointer != NULL && ID_IS_LINKED(*id_pointer)) {
BLI_assert(*id_pointer != id_self);
lib_id_clear_library_data_ex(bmain, *id_pointer);