1
0
Fork 0
mirror of https://github.com/ocornut/imgui.git synced 2026-01-26 02:34:23 +00:00

TreeNode: fixed out of bound access in ImGuiTreeNodeFlags_DrawLinesXXX feature. (#2920)

TreeNode behavior would read TreeRecordsClippedNodesY2Mask from an older node at same lebel, and write to g.TreeNodeStack.Data[-1].
This commit is contained in:
ocornut 2025-06-02 20:50:12 +02:00
parent b7ab2b7523
commit ef503ab0c8

View file

@ -6990,7 +6990,7 @@ void ImGui::TreePop()
window->DC.TreeDepth--;
ImU32 tree_depth_mask = (1 << window->DC.TreeDepth);
if (window->DC.TreeHasStackDataDepthMask & tree_depth_mask) // Only set during request
if (window->DC.TreeHasStackDataDepthMask & tree_depth_mask)
{
const ImGuiTreeNodeStackData* data = &g.TreeNodeStack.Data[g.TreeNodeStack.Size - 1];
IM_ASSERT(data->ID == window->IDStack.back());
@ -7006,6 +7006,7 @@ void ImGui::TreePop()
g.TreeNodeStack.pop_back();
window->DC.TreeHasStackDataDepthMask &= ~tree_depth_mask;
window->DC.TreeRecordsClippedNodesY2Mask &= ~tree_depth_mask;
}
IM_ASSERT(window->IDStack.Size > 1); // There should always be 1 element in the IDStack (pushed during window creation). If this triggers you called TreePop/PopID too much.