From c131728aa4de5d518a9f7e8bc93a402174667a0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Fri, 17 Jan 2020 15:44:21 +0100 Subject: [PATCH] Give more context when crashing during .png sheet loading. --- OpenRA.Mods.Common/SpriteLoaders/PngSheetLoader.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) 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();