Fix T46655: crash reading unknown ID types
This commit is contained in:
parent
632ed6a0d6
commit
99df433ea7
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user