From b680a97d2c00cc698261864d7cb635e9dbfd169b Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sun, 25 Sep 2016 21:24:34 +0100 Subject: [PATCH] Fix integer overflows in Wangle.ArcTan. --- OpenRA.Game/WAngle.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/OpenRA.Game/WAngle.cs b/OpenRA.Game/WAngle.cs index 4260b01149..ab16e4b0a5 100644 --- a/OpenRA.Game/WAngle.cs +++ b/OpenRA.Game/WAngle.cs @@ -91,11 +91,13 @@ namespace OpenRA var ax = Math.Abs(x); // Find the closest angle that satisfies y = x*tan(theta) - var bestVal = int.MaxValue; + // Uses a long to store bestVal to eliminate integer overflow issues in the common cases + // (may still fail for unrealistically large ax and ay) + var bestVal = long.MaxValue; var bestAngle = 0; for (var i = 0; i < 256; i += stride) { - var val = Math.Abs(1024 * ay - ax * TanTable[i]); + var val = Math.Abs(1024 * ay - (long)ax * TanTable[i]); if (val < bestVal) { bestVal = val;