Browse Source

ImDrawList: Fixed OOB access in _CalcCircleAutoSegmentCount when passing excessively large radius to AddCircle(). (#6657, #5317)

EggsyCRO 2 years ago
parent
commit
52587c28d6
2 changed files with 3 additions and 1 deletions
  1. 2 0
      docs/CHANGELOG.txt
  2. 1 1
      imgui_draw.cpp

+ 2 - 0
docs/CHANGELOG.txt

@@ -46,6 +46,8 @@ Other changes:
 
 - Sliders: Fixed an integer overflow and div-by-zero in SliderInt() when
   v_max=INT_MAX (#6675, #6679) [@jbarthelmes]
+- ImDrawList: Fixed OOB access in _CalcCircleAutoSegmentCount when passing excessively
+  large radius to AddCircle(). (#6657, #5317) [@EggsyCRO, @jdpatdiscord]
 
 
 -----------------------------------------------------------------------

+ 1 - 1
imgui_draw.cpp

@@ -561,7 +561,7 @@ int ImDrawList::_CalcCircleAutoSegmentCount(float radius) const
 {
     // Automatic segment count
     const int radius_idx = (int)(radius + 0.999999f); // ceil to never reduce accuracy
-    if (radius_idx < IM_ARRAYSIZE(_Data->CircleSegmentCounts))
+    if (radius_idx >= 0 && radius_idx < IM_ARRAYSIZE(_Data->CircleSegmentCounts))
         return _Data->CircleSegmentCounts[radius_idx]; // Use cached value
     else
         return IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_CALC(radius, _Data->CircleSegmentMaxError);