diff --git a/OpenRA.Mods.Common/SpriteLoaders/PngSheetLoader.cs b/OpenRA.Mods.Common/SpriteLoaders/PngSheetLoader.cs index a88e2ccbe5..6b4f19158a 100644 --- a/OpenRA.Mods.Common/SpriteLoaders/PngSheetLoader.cs +++ b/OpenRA.Mods.Common/SpriteLoaders/PngSheetLoader.cs @@ -96,13 +96,18 @@ namespace OpenRA.Mods.Common.SpriteLoaders { regions = new List(); offsets = new List(); + var pngRectangle = new Rectangle(0, 0, png.Width, png.Height); string frame; for (var i = 0; png.EmbeddedData.TryGetValue("Frame[" + i + "]", out frame); i++) { // Format: x,y,width,height;offsetX,offsetY var coords = frame.Split(';'); - regions.Add(FieldLoader.GetValue("Region", coords[0])); + var region = FieldLoader.GetValue("Region", coords[0]); + if (!pngRectangle.Contains(region)) + throw new InvalidDataException("Invalid frame regions {0} defined.".F(region)); + + regions.Add(region); offsets.Add(FieldLoader.GetValue("Offset", coords[1])); } } @@ -141,6 +146,10 @@ namespace OpenRA.Mods.Common.SpriteLoaders var framesPerRow = png.Width / frameSize.Width; + var rows = (frameAmount + framesPerRow - 1) / framesPerRow; + if (png.Width < frameSize.Width * frameAmount / rows || png.Height < frameSize.Height * rows) + throw new InvalidDataException("Invalid frame size {0} and frame amount {1} defined.".F(frameSize, frameAmount)); + regions = new List(); offsets = new List();