From 8bac02ed14553677a04efb1cd8dd01d56cfe5856 Mon Sep 17 00:00:00 2001
From: MaxED <j.maxed@gmail.com>
Date: Sun, 10 Apr 2016 21:04:27 +0000
Subject: [PATCH] Fixed: fixed a crash when determining sprite angles when
 there was more than one sprite for the same frame and angle.

---
 Source/Core/Config/ThingTypeInfo.cs | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/Source/Core/Config/ThingTypeInfo.cs b/Source/Core/Config/ThingTypeInfo.cs
index a579c0d68..b630198b2 100644
--- a/Source/Core/Config/ThingTypeInfo.cs
+++ b/Source/Core/Config/ThingTypeInfo.cs
@@ -564,21 +564,28 @@ namespace CodeImp.DoomBuilder.Config
 						return;
 					}
 
+					// Sanity checks
 					if(targetangle == 0)
 					{
 						General.ErrorLogger.Add(ErrorType.Warning, "Warning: actor \"" + title + "\":" + index + ", sprite \"" + sourcename + "\", frame " + targetframe + " has both rotated and non-rotated versions");
 						continue;
 					}
 
+					// More sanity checks
 					if(targetangle < 1 || targetangle > 8)
 					{
 						General.ErrorLogger.Add(ErrorType.Error, "Error in actor \"" + title + "\":" + index + ", sprite \"" + s + "\". Expected sprite angle in [1..8] range");
 						return;
 					}
 
+					// Even more sanity checks
+					if(!string.IsNullOrEmpty(frames[targetangle - 1]))
+						General.ErrorLogger.Add(ErrorType.Warning, "Warning in actor \"" + title + "\":" + index + ". Sprite \"" + sourcename + "\", frame " + targetframe + ", angle " + targetangle + " is double-defined");
+					else
+						processedcount++;
+
 					// Add to collection
 					frames[targetangle - 1] = s;
-					processedcount++;
 				}
 
 				// Check second frame block?
@@ -596,22 +603,29 @@ namespace CodeImp.DoomBuilder.Config
 						return;
 					}
 
+					// Sanity checks
 					if(targetangle == 0)
 					{
 						General.ErrorLogger.Add(ErrorType.Warning, "Warning: actor \"" + title + "\":" + index + ", sprite \"" + sourcename + "\", frame " + targetframe + " has both rotated and non-rotated versions");
 						continue;
 					}
 
+					// More sanity checks
 					if(targetangle < 1 || targetangle > 8)
 					{
 						General.ErrorLogger.Add(ErrorType.Error, "Error in actor \"" + title + "\":" + index + ", sprite \"" + s + "\". Expected sprite angle in [1..8] range");
 						return;
 					}
 
+					// Even more sanity checks
+					if(!string.IsNullOrEmpty(frames[targetangle - 1]))
+						General.ErrorLogger.Add(ErrorType.Warning, "Warning in actor \"" + title + "\":" + index + ". Sprite \"" + sourcename + "\", frame " + targetframe + ", angle " + targetangle + " is double-defined");
+					else
+						processedcount++;
+
 					// Add to collections
 					frames[targetangle - 1] = s;
 					mirror[targetangle - 1] = true;
-					processedcount++;
 				}
 
 				// Gathered all sprites?
-- 
GitLab