Partially fix & comment about bad handling of wrong_id in read_libblock().
Not fully fixing it for now since I do not see an easy way to remove freed pointer from libmap, and it does not seem to be an actual, practical issue currently, but eeek...
This commit is contained in:
@@ -9315,6 +9315,9 @@ static BHead *read_libblock(FileData *fd,
|
||||
ID *id;
|
||||
ListBase *lb;
|
||||
const char *allocname;
|
||||
|
||||
/* XXX Very weakly handled currently, see comment at the end of this function before trying to
|
||||
* use it for anything new. */
|
||||
bool wrong_id = false;
|
||||
|
||||
/* In undo case, most libs and linked data should be kept as is from previous state
|
||||
@@ -9570,7 +9573,14 @@ static BHead *read_libblock(FileData *fd,
|
||||
oldnewmap_clear(fd->datamap);
|
||||
|
||||
if (wrong_id) {
|
||||
/* XXX This is probably working OK currently given the very limited scope of that flag.
|
||||
* However, it is absolutely **not** handled correctly: it is freeing an ID pointer that has
|
||||
* been added to the fd->libmap mapping, which in theory could lead to nice crashes...
|
||||
* This should be properly solved at some point. */
|
||||
BKE_id_free(main, id);
|
||||
if (r_id != NULL) {
|
||||
*r_id = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
return (bhead);
|
||||
|
||||
Reference in New Issue
Block a user