Blenloader: Don't just crash when a struct name is not known
Related to T77524. This brings back the old way of handling corrupted data.
This commit is contained in:
parent
6fe32d7fd6
commit
3ea04d3e11
|
@ -4548,8 +4548,7 @@ void BLO_write_raw(BlendWriter *writer, int size_in_bytes, const void *data_ptr)
|
|||
|
||||
void BLO_write_struct_by_name(BlendWriter *writer, const char *struct_name, const void *data_ptr)
|
||||
{
|
||||
int struct_id = BLO_get_struct_id_by_name(writer, struct_name);
|
||||
BLO_write_struct_by_id(writer, struct_id, data_ptr);
|
||||
BLO_write_struct_array_by_name(writer, struct_name, 1, data_ptr);
|
||||
}
|
||||
|
||||
void BLO_write_struct_array_by_name(BlendWriter *writer,
|
||||
|
@ -4558,6 +4557,10 @@ void BLO_write_struct_array_by_name(BlendWriter *writer,
|
|||
const void *data_ptr)
|
||||
{
|
||||
int struct_id = BLO_get_struct_id_by_name(writer, struct_name);
|
||||
if (UNLIKELY(struct_id == -1)) {
|
||||
printf("error: can't find SDNA code <%s>\n", struct_name);
|
||||
return;
|
||||
}
|
||||
BLO_write_struct_array_by_id(writer, struct_id, array_size, data_ptr);
|
||||
}
|
||||
|
||||
|
@ -4595,7 +4598,12 @@ void BLO_write_struct_list_by_id(BlendWriter *writer, int struct_id, ListBase *l
|
|||
|
||||
void BLO_write_struct_list_by_name(BlendWriter *writer, const char *struct_name, ListBase *list)
|
||||
{
|
||||
BLO_write_struct_list_by_id(writer, BLO_get_struct_id_by_name(writer, struct_name), list);
|
||||
int struct_id = BLO_get_struct_id_by_name(writer, struct_name);
|
||||
if (UNLIKELY(struct_id == -1)) {
|
||||
printf("error: can't find SDNA code <%s>\n", struct_name);
|
||||
return;
|
||||
}
|
||||
BLO_write_struct_list_by_id(writer, struct_id, list);
|
||||
}
|
||||
|
||||
void blo_write_id_struct(BlendWriter *writer, int struct_id, const void *id_address, const ID *id)
|
||||
|
@ -4606,7 +4614,6 @@ void blo_write_id_struct(BlendWriter *writer, int struct_id, const void *id_addr
|
|||
int BLO_get_struct_id_by_name(BlendWriter *writer, const char *struct_name)
|
||||
{
|
||||
int struct_id = DNA_struct_find_nr(writer->wd->sdna, struct_name);
|
||||
BLI_assert(struct_id >= 0);
|
||||
return struct_id;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue