diff --git a/imgui.h b/imgui.h index a070e36d5..3598a7892 100644 --- a/imgui.h +++ b/imgui.h @@ -3012,6 +3012,7 @@ struct ImSmallStack_ inline T& back() { IM_ASSERT(Size > 0); return LocalData[Size - 1]; } inline void push_back(const T& v) { IM_ASSERT(Size < Capacity); memcpy(&LocalData[Size], &v, sizeof(v)); Size++; } inline void pop_back() { IM_ASSERT(Size > 0); Size--; } + inline int capacity() const { return Capacity; } }; // Flags for ImGuiListClipper (currently not fully exposed in function calls: a future refactor will likely add this to ImGuiListClipper::Begin function equivalent) diff --git a/imgui_draw.cpp b/imgui_draw.cpp index 5eeba7be1..b326b5dae 100644 --- a/imgui_draw.cpp +++ b/imgui_draw.cpp @@ -724,6 +724,7 @@ void ImDrawList::PushDrawFlag(ImDrawFlags flags, bool enabled) { IM_ASSERT((flags & ~ImDrawFlags_AllowInPushScope_) == 0); IM_ASSERT((flags & ImDrawFlags_StrokeMask_) == 0 || (flags & ImDrawFlags_StrokeMask_) == ImDrawFlags_StrokeLegacy); + IM_ASSERT_USER_ERROR_RET(_DrawFlagsStack.Size < _DrawFlagsStack.capacity(), "PushDrawFlag() has a depth limit. Contact us."); _DrawFlagsStack.push_back(Flags); if (enabled) Flags |= flags;