foxygit / doom Log in
commit 75f59299d005221304de2064558af2027eced6d7
Author:     Simon Howard <fraggle@gmail.com>
AuthorDate: Sun Sep 25 19:58:41 2011 +0000
Commit:     Simon Howard <fraggle@gmail.com>
CommitDate: Sun Sep 25 19:58:41 2011 +0000

    Handle WAD merging correctly when the sprites list contains lumps with
    incorrectly formatted names - fixes merging for Heretic.

    Subversion-branch: /branches/v2-branch
    Subversion-revision: 2405
---
 src/w_merge.c | 36 ++++++++++++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)

diff --git a/src/w_merge.c b/src/w_merge.c
index 150f075c..027c6c2c 100644
--- a/src/w_merge.c
+++ b/src/w_merge.c
@@ -29,6 +29,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <ctype.h>

 #include "doomtype.h"
 #include "i_system.h"
@@ -158,6 +159,31 @@ static void InitSpriteList(void)
     num_sprite_frames = 0;
 }

+static boolean ValidSpriteLumpName(char *name)
+{
+    if (name[0] == '\0' || name[1] == '\0'
+     || name[2] == '\0' || name[3] == '\0')
+    {
+        return false;
+    }
+
+    // First frame:
+
+    if (name[4] == '\0' || !isdigit(name[5]))
+    {
+        return false;
+    }
+
+    // Second frame (optional):
+
+    if (name[6] != '\0' && !isdigit(name[7]))
+    {
+        return false;
+    }
+
+    return true;
+}
+
 // Find a sprite frame

 static sprite_frame_t *FindSpriteFrame(char *name, int frame)
@@ -216,6 +242,11 @@ static boolean SpriteLumpNeeded(lumpinfo_t *lump)
     int angle_num;
     int i;

+    if (!ValidSpriteLumpName(lump->name))
+    {
+        return true;
+    }
+
     // check the first frame

     sprite = FindSpriteFrame(lump->name, lump->name[4]);
@@ -274,6 +305,11 @@ static void AddSpriteLump(lumpinfo_t *lump)
     sprite_frame_t *sprite;
     int angle_num;
     int i;
+
+    if (!ValidSpriteLumpName(lump->name))
+    {
+        return;
+    }

     // first angle