diff options
author | Bastien Montagne <bastien@blender.org> | 2022-02-28 17:02:17 +0300 |
---|---|---|
committer | Bastien Montagne <bastien@blender.org> | 2022-02-28 17:02:17 +0300 |
commit | 413e87b6b7edf8cc1569818de3d26fccc391d235 (patch) | |
tree | 9ed1c1a9f88bcdf42df12956e263ef5503af0c51 /source/blender/blenkernel/intern | |
parent | 6bbf63f25195d97c2770470a973bafb35dda5e28 (diff) |
Fix T96048: Crash on appending with driver variables loop in shapekeys.
The usual 'shape keys snowflake' nightmare again...
Diffstat (limited to 'source/blender/blenkernel/intern')
-rw-r--r-- | source/blender/blenkernel/intern/blendfile_link_append.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/source/blender/blenkernel/intern/blendfile_link_append.c b/source/blender/blenkernel/intern/blendfile_link_append.c index 9b3f4c2fae8..f0da1b68821 100644 --- a/source/blender/blenkernel/intern/blendfile_link_append.c +++ b/source/blender/blenkernel/intern/blendfile_link_append.c @@ -941,8 +941,13 @@ static int foreach_libblock_link_append_callback(LibraryIDLinkCallbackData *cb_d * processed, so we need to recursively deal with them here. */ /* NOTE: Since we are by-passing checks in `BKE_library_foreach_ID_link` by manually calling it * recursively, we need to take care of potential recursion cases ourselves (e.g.animdata of - * shape-key referencing the shape-key itself). */ - if (id != cb_data->id_self) { + * shape-key referencing the shape-key itself). + * NOTE: in case both IDs (owner and 'used' ones) are non-linkable, we can assume we can break + * the dependency here. Indeed, either they are both linked in another way (through their own + * meshes for shape keys e.g.), or this is an unsupported case (two shapekeys depending on + * each-other need to be also 'linked' in by their respective meshes, independant shapekeys are + * not allowed). ref T96048. */ + if (id != cb_data->id_self && BKE_idtype_idcode_is_linkable(GS(cb_data->id_self->name))) { BKE_library_foreach_ID_link( cb_data->bmain, id, foreach_libblock_link_append_callback, data, IDWALK_NOP); } |