Fix T46655: crash reading unknown ID types

This commit is contained in:
Campbell Barton 2015-11-01 14:27:25 +11:00
parent 632ed6a0d6
commit 99df433ea7
Notes: blender-bot 2023-02-21 17:59:30 +01:00
Referenced by issue #46655, Blender Crashes on opening file
1 changed files with 17 additions and 12 deletions

View File

@ -7908,23 +7908,28 @@ static BHead *read_libblock(FileData *fd, Main *main, BHead *bhead, int flag, ID
/* read libblock */
id = read_struct(fd, bhead, "lib block");
if (id) {
const short idcode = (bhead->code == ID_ID) ? GS(id->name) : bhead->code;
/* do after read_struct, for dna reconstruct */
lb = which_libbase(main, idcode);
if (lb) {
oldnewmap_insert(fd->libmap, bhead->old, id, bhead->code); /* for ID_ID check */
BLI_addtail(lb, id);
}
else {
/* unknown ID type */
printf("%s: unknown id code '%c%c'\n", __func__, (idcode & 0xff), (idcode >> 8));
MEM_freeN(id);
id = NULL;
}
}
if (r_id)
*r_id = id;
if (!id)
return blo_nextbhead(fd, bhead);
oldnewmap_insert(fd->libmap, bhead->old, id, bhead->code); /* for ID_ID check */
/* do after read_struct, for dna reconstruct */
if (bhead->code == ID_ID) {
lb = which_libbase(main, GS(id->name));
}
else {
lb = which_libbase(main, bhead->code);
}
BLI_addtail(lb, id);
/* clear first 8 bits */
id->flag = (id->flag & 0xFF00) | flag | LIB_NEED_LINK;
id->lib = main->curlib;