From fd532fbd6f2745b7a527fcb7ba444e0d82f742ed Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Thu, 9 Mar 2023 17:39:34 +0000 Subject: [PATCH] Avoid integer overflow issues in measurement tooltip For large distances Use integer instead of floating point sqrt --- src/viewport.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/viewport.cpp b/src/viewport.cpp index 9b0290b4d5..1d81416174 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -6007,8 +6007,7 @@ calc_heightdiff_single_direction:; if (dx != 1 || dy != 1) { heightdiff = CalcHeightdiff(style, 0, t0, t1); params[index++] = DistanceManhattan(t0, t1); - params[index++] = sqrtl(dx * dx + dy * dy); //DistanceSquare does not like big numbers - + params[index++] = IntSqrt64(((uint64)dx * (uint64)dx) + ((uint64)dy * (uint64)dy)); // Avoid overflow in DistanceSquare } else { index += 2; } @@ -6016,8 +6015,8 @@ calc_heightdiff_single_direction:; params[index++] = DistanceFromEdge(t1); params[index++] = GetTileMaxZ(t1) * TILE_HEIGHT_STEP; params[index++] = heightdiff; - //Show always the measurement tooltip - GuiShowTooltips(_thd.GetCallbackWnd(),STR_MEASURE_DIST_HEIGHTDIFF, index, params, TCC_EXIT_VIEWPORT); + /* Always show the measurement tooltip */ + GuiShowTooltips(_thd.GetCallbackWnd(), STR_MEASURE_DIST_HEIGHTDIFF, index, params, TCC_EXIT_VIEWPORT); break; }