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:
authorJulian Eisel <julian@blender.org>2022-03-29 16:17:25 +0300
committerJulian Eisel <julian@blender.org>2022-03-29 16:24:02 +0300
commit4a5cd4e6c75d2a41ba0bffd971cd768ee76077ae (patch)
treeaa2d7625813926e0d43f75f38cc6a88720eb2497 /source/blender/editors/space_outliner
parentfced604acfc90ae2bdca068ce1898cdc39838b5f (diff)
Fix T96844: Crash when switching workspaces and outliner modes
Error exposed by ba49345705a3. Code just assumed that the tree-element pointed to a real ID, but this is often not the case, and the ID pointer contains completely different data. E.g. before ba49345705a3, it would be a pointer to one of the `Main` listbases, so this code would have undefined behavior. Now the pointer is null for elements in the "Current File" element, causing a null-pointer dereference rather than undefined behavior (that just happened to virtually always result in the intended code path).
Diffstat (limited to 'source/blender/editors/space_outliner')
-rw-r--r--source/blender/editors/space_outliner/outliner_tree.cc3
1 files changed, 2 insertions, 1 deletions
diff --git a/source/blender/editors/space_outliner/outliner_tree.cc b/source/blender/editors/space_outliner/outliner_tree.cc
index 19fe40b612e..bbd9b48c260 100644
--- a/source/blender/editors/space_outliner/outliner_tree.cc
+++ b/source/blender/editors/space_outliner/outliner_tree.cc
@@ -712,7 +712,8 @@ static void outliner_add_id_contents(SpaceOutliner *space_outliner,
else {
/* do not extend Armature when we have posemode */
tselem = TREESTORE(te->parent);
- if (GS(tselem->id->name) == ID_OB && ((Object *)tselem->id)->mode & OB_MODE_POSE) {
+ if (TSE_IS_REAL_ID(tselem) && GS(tselem->id->name) == ID_OB &&
+ ((Object *)tselem->id)->mode & OB_MODE_POSE) {
/* pass */
}
else {