Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Montagne <montagne29@wanadoo.fr>2020-01-28 17:46:51 +0300
committerBastien Montagne <montagne29@wanadoo.fr>2020-01-28 18:09:57 +0300
commit864cb7f376816ccd05e6e143dab668329b070faa (patch)
treeb112fa69a34ca5ab42f9d47eb67de02160bcd336 /source/blender/blenloader
parentd33f4bce8dc0764c14c173a37570b427a15df8e8 (diff)
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...
Diffstat (limited to 'source/blender/blenloader')
-rw-r--r--source/blender/blenloader/intern/readfile.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 0ebff916cf9..f6cf68f7daf 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -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);