diff options
-rw-r--r-- | source/blender/blenkernel/intern/cachefile.c | 1 | ||||
-rw-r--r-- | source/blender/blenloader/intern/readfile.c | 9 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_access_compare_override.c | 4 |
3 files changed, 11 insertions, 3 deletions
diff --git a/source/blender/blenkernel/intern/cachefile.c b/source/blender/blenkernel/intern/cachefile.c index d233022fd3f..feae033337d 100644 --- a/source/blender/blenkernel/intern/cachefile.c +++ b/source/blender/blenkernel/intern/cachefile.c @@ -99,6 +99,7 @@ static void cache_file_blend_write(BlendWriter *writer, ID *id, const void *id_a cache_file->handle_readers = NULL; BLO_write_id_struct(writer, CacheFile, id_address, &cache_file->id); + BKE_id_blend_write(writer, &cache_file->id); if (cache_file->adt) { BKE_animdata_blend_write(writer, cache_file->adt); diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index f97f6f65551..b657cb8b2f9 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -2497,9 +2497,12 @@ static void direct_link_id_common( /* Link direct data of overrides. */ if (id->override_library) { BLO_read_data_address(reader, &id->override_library); - BLO_read_list_cb( - reader, &id->override_library->properties, direct_link_id_override_property_cb); - id->override_library->runtime = NULL; + /* Work around file corruption on writing, see T86853. */ + if (id->override_library != NULL) { + BLO_read_list_cb( + reader, &id->override_library->properties, direct_link_id_override_property_cb); + id->override_library->runtime = NULL; + } } DrawDataList *drawdata = DRW_drawdatalist_from_id(id); diff --git a/source/blender/makesrna/intern/rna_access_compare_override.c b/source/blender/makesrna/intern/rna_access_compare_override.c index 80833d4f992..39e7774e5a4 100644 --- a/source/blender/makesrna/intern/rna_access_compare_override.c +++ b/source/blender/makesrna/intern/rna_access_compare_override.c @@ -1098,6 +1098,10 @@ static void rna_property_override_check_resync(Main *bmain, ID *id_dst = rna_property_override_property_real_id_owner(bmain, ptr_item_dst, NULL, NULL); BLI_assert(id_src == NULL || ID_IS_OVERRIDE_LIBRARY_REAL(id_src)); + /* Work around file corruption on writing, see T86853. */ + if (id_src != NULL && !ID_IS_OVERRIDE_LIBRARY_REAL(id_src)) { + return; + } if (/* We might be in a case where id_dst has already been processed and its usages * remapped to its new local override. In that case overrides and linked data |