From c6c00aa7d5e5ba923b28c3fa8ad53fb5eed501ad Mon Sep 17 00:00:00 2001
From: Nev3r <apophycens@gmail.com>
Date: Mon, 30 Dec 2019 13:38:52 +0100
Subject: [PATCH] Tweak TextmapCount()'s bracket detection to account for
 multiple levels, if that ever happens.

---
 src/p_setup.c | 19 ++++++-------------
 1 file changed, 6 insertions(+), 13 deletions(-)

diff --git a/src/p_setup.c b/src/p_setup.c
index ccb5286877..55f0b4f3e6 100644
--- a/src/p_setup.c
+++ b/src/p_setup.c
@@ -1249,6 +1249,7 @@ UINT32 sectorsPos[UINT16_MAX];
 static boolean TextmapCount(UINT8 *data, size_t size)
 {
 	char *tkn = M_GetToken((char *)data);
+	UINT8 brackets = 0;
 
 	nummapthings = 0;
 	numlines = 0;
@@ -1275,21 +1276,13 @@ static boolean TextmapCount(UINT8 *data, size_t size)
 	while (tkn && M_GetTokenPos() < size)
 	{
 		// Avoid anything inside bracketed stuff, only look for external keywords.
-		// Assuming there's only one level of bracket nesting.
-		if (fastcmp(tkn, "{"))
+		if (brackets)
 		{
-			do
-			{
-				Z_Free(tkn);
-				tkn = M_GetToken(NULL);
-				if (!tkn || M_GetTokenPos() >= size)
-				{
-					Z_Free(tkn);
-					CONS_Alert(CONS_WARNING, "Opening bracket not closed!\n");
-					return false;
-				}
-			} while (!fastcmp(tkn, "}"));
+			if (fastcmp(tkn, "}"))
+				brackets--;
 		}
+		else if (fastcmp(tkn, "{"))
+			brackets++;
 		// Check for valid fields.
 		else if (fastcmp(tkn, "thing"))
 			mapthingsPos[nummapthings++] = M_GetTokenPos();
-- 
GitLab