ProgressBar: Fixed passing fraction==NaN from leading to a crash. (#7451)
diff --git a/docs/CHANGELOG.txt b/docs/CHANGELOG.txt
index 74a201a..bc5822f 100644
--- a/docs/CHANGELOG.txt
+++ b/docs/CHANGELOG.txt
@@ -70,6 +70,7 @@
frames would erroneously close the window. While it is technically a popup issue
it would generally manifest when fast moving the mouse bottom to top in a sub-menu.
(#7325, #7287, #7063)
+- ProgressBar: Fixed passing fraction==NaN from leading to a crash. (#7451)
- Style: Added ImGuiStyleVar_TabBorderSize, ImGuiStyleVar_TableAngledHeadersAngle for
consistency. (#7411) [@cfillion]
- DrawList: Added AddConcavePolyFilled(), PathFillConcave() concave filling. (#760) [@thedmd]
diff --git a/imgui_widgets.cpp b/imgui_widgets.cpp
index d83a080..f1ffbf0 100644
--- a/imgui_widgets.cpp
+++ b/imgui_widgets.cpp
@@ -1288,12 +1288,15 @@
if (!ItemAdd(bb, 0))
return;
- // Render
+ // Out of courtesy we accept a NaN fraction without crashing
fraction = ImSaturate(fraction);
+ const float fraction_not_nan = (fraction == fraction) ? fraction : 0.0f;
+
+ // Render
RenderFrame(bb.Min, bb.Max, GetColorU32(ImGuiCol_FrameBg), true, style.FrameRounding);
bb.Expand(ImVec2(-style.FrameBorderSize, -style.FrameBorderSize));
- const ImVec2 fill_br = ImVec2(ImLerp(bb.Min.x, bb.Max.x, fraction), bb.Max.y);
- RenderRectFilledRangeH(window->DrawList, bb, GetColorU32(ImGuiCol_PlotHistogram), 0.0f, fraction, style.FrameRounding);
+ const ImVec2 fill_br = ImVec2(ImLerp(bb.Min.x, bb.Max.x, fraction_not_nan), bb.Max.y);
+ RenderRectFilledRangeH(window->DrawList, bb, GetColorU32(ImGuiCol_PlotHistogram), 0.0f, fraction_not_nan, style.FrameRounding);
// Default displaying the fraction as percentage string, but user can override it
char overlay_buf[32];