From 53d916d7f140786473b1b083d69240e41a8d0c54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sat, 11 Apr 2020 16:03:42 +0200 Subject: [PATCH] Add some basic error handling to png metadata writing. --- .../PngSheetImportMetadataCommand.cs | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/OpenRA.Mods.Common/UtilityCommands/PngSheetImportMetadataCommand.cs b/OpenRA.Mods.Common/UtilityCommands/PngSheetImportMetadataCommand.cs index ce7fd80231..b828f1b85e 100644 --- a/OpenRA.Mods.Common/UtilityCommands/PngSheetImportMetadataCommand.cs +++ b/OpenRA.Mods.Common/UtilityCommands/PngSheetImportMetadataCommand.cs @@ -10,7 +10,9 @@ #endregion using System.IO; +using System.Linq; using OpenRA.FileFormats; +using OpenRA.Primitives; namespace OpenRA.Mods.Common.UtilityCommands { @@ -30,7 +32,23 @@ namespace OpenRA.Mods.Common.UtilityCommands using (var pngStream = File.OpenRead(args[1])) png = new Png(pngStream); - foreach (var node in MiniYaml.FromFile(Path.ChangeExtension(args[1], "yaml"))) + var yaml = MiniYaml.FromFile(Path.ChangeExtension(args[1], "yaml")); + + var frameSizeField = yaml.Where(y => y.Key == "FrameSize").Select(y => y.Value.Value).FirstOrDefault(); + if (frameSizeField != null) + { + var frameSize = FieldLoader.GetValue("FrameSize", frameSizeField); + + var frameAmountField = yaml.Where(y => y.Key == "FrameAmount").Select(y => y.Value.Value).FirstOrDefault(); + if (frameAmountField != null) + { + var frameAmount = FieldLoader.GetValue("FrameAmount", frameAmountField); + if (frameAmount > (png.Width / frameSize.Width) * (png.Height / frameSize.Height)) + throw new InvalidDataException(".png file is too small for given FrameSize and FrameAmount."); + } + } + + foreach (var node in yaml) png.EmbeddedData[node.Key] = node.Value.Value; png.Save(args[1]);