changeset 1255:f9bf71071f0b

Some work on JSSMOD loader.
author Matti Hamalainen <ccr@tnsp.org>
date Sun, 08 Mar 2015 01:59:52 +0200
parents 47d8e5e0e592
children d88d5f88b77a
files minijss/jloadjss.c
diffstat 1 files changed, 20 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/minijss/jloadjss.c	Sun Mar 08 01:15:09 2015 +0200
+++ b/minijss/jloadjss.c	Sun Mar 08 01:59:52 2015 +0200
@@ -412,47 +412,55 @@
     // Parse the patterns
     for (index = 0; index < module->npatterns; index++)
     {
+        JSSPattern *pattern;
         JSSMODPattern jssP;
 
-        // Get header and check size
-        dmMemset(&jssP, 0, sizeof(jssP));
-        JSGETBUF(&jssP, JSSMODPattern);
+        // Read pattern header
+        if (!dmf_read_le32(inFile, &jssP.size) ||
+            !dmf_read_le16(inFile, &jssP.nrows))
+            JSSERROR(DMERR_FREAD, DMERR_FREAD,
+            "Failed to read JSSMOD pattern header #%d.\n",
+            index);
+
+        // Validate
+        if (jssP.nrows == 0 || jssP.nrows > jsetMaxRows)
+            JSSERROR(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
+            "Invalid number of rows in pattern #%d: %d.\n",
+            index, jssP.nrows
 
         // Allocate pattern
-        module->patterns[index] = jssAllocatePattern(jssP.nrows, module->nchannels);
-        if (module->patterns[index] == NULL)
-        {
+        pattern = module->patterns[index] = jssAllocatePattern(jssP.nrows, module->nchannels);
+        if (pattern == NULL)
             JSSERROR(DMERR_MALLOC, DMERR_MALLOC,
             "Could not allocate memory for pattern #%d.\n",
             index);
-        }
 
         // Get pattern data
         switch (jssH.patMode)
         {
 #ifdef JM_SUP_PATMODE_1
             case PATMODE_RAW_HORIZ:
-                ret = jssGetPatternRawHoriz(inFile, module->patterns[index]);
+                ret = jssGetPatternRawHoriz(inFile, pattern);
                 break;
 #endif
 #ifdef JM_SUP_PATMODE_2
             case PATMODE_COMP_HORIZ:
-                ret = jssGetPatternCompHoriz(inFile, module->patterns[index]);
+                ret = jssGetPatternCompHoriz(inFile, pattern);
                 break;
 #endif
 #ifdef JM_SUP_PATMODE_3
             case PATMODE_RAW_VERT:
-                ret = jssGetPatternRawVert(inFile, module->patterns[index]);
+                ret = jssGetPatternRawVert(inFile, pattern);
                 break;
 #endif
 #ifdef JM_SUP_PATMODE_4
             case PATMODE_COMP_VERT:
-                ret = jssGetPatternCompVert(inFile, module->patterns[index]);
+                ret = jssGetPatternCompVert(inFile, pattern);
                 break;
 #endif
 #ifdef JM_SUP_PATMODE_5
             case PATMODE_RAW_ELEM:
-                ret = jssGetPatternRawVertElem(inFile, module->patterns[index]);
+                ret = jssGetPatternRawVertElem(inFile, pattern);
                 break;
 #endif
             default: