Fix T86853: Critical bug in write code of CacheFile ID.
CacheFile writing code would not write generic ID data (call for it has been missing since the initial commit, rB61050f75b13e). While potentially affecting other areas (mostly CustomProperties/IDProperties), this was a critical failure for liboverrides. Also added some workaround code to allow opening broken files (though the override of the CacheFile data-block will be lost).
This commit is contained in:
parent
3b0531154e
commit
150e0553da
Notes:
blender-bot
2023-02-14 07:31:34 +01:00
Referenced by issue #86853, Corrupted Blend file with overridden MeshSequenceCache
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue