From 045eb123887a1a65f69df2f0743369820f3f75be Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Thu, 11 Jul 2013 18:43:55 +1200 Subject: [PATCH] Fix an integer overflow in Target.IsInRange. --- OpenRA.Game/Traits/Target.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/OpenRA.Game/Traits/Target.cs b/OpenRA.Game/Traits/Target.cs index 9d0466db0f..04664d7c07 100644 --- a/OpenRA.Game/Traits/Target.cs +++ b/OpenRA.Game/Traits/Target.cs @@ -90,8 +90,13 @@ namespace OpenRA.Traits return false; // Target ranges are calculated in 2D, so ignore height differences - return Positions.Any(t => (t.X - origin.X)*(t.X - origin.X) + - (t.Y - origin.Y)*(t.Y - origin.Y) <= range.Range*range.Range); + var rangeSquared = range.Range*range.Range; + return Positions.Any(t => + { + var dx = (long)(t.X - origin.X); + var dy = (long)(t.Y - origin.Y); + return dx*dx + dy*dy <= rangeSquared; + }); } }