[Bf-blender-cvs] [4a5cd4e6c75] master: Fix T96844: Crash when switching workspaces and outliner modes

Julian Eisel noreply at git.blender.org
Tue Mar 29 15:24:57 CEST 2022


Commit: 4a5cd4e6c75d2a41ba0bffd971cd768ee76077ae
Author: Julian Eisel
Date:   Tue Mar 29 15:17:25 2022 +0200
Branches: master
https://developer.blender.org/rB4a5cd4e6c75d2a41ba0bffd971cd768ee76077ae

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).

===================================================================

M	source/blender/editors/space_outliner/outliner_tree.cc

===================================================================

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 {



More information about the Bf-blender-cvs mailing list