# HG changeset patch # User Matti Hamalainen # Date 1425772792 -7200 # Node ID f9bf71071f0b90af6242b662d4f705a2c0268431 # Parent 47d8e5e0e592c38db9020fd0861a8b2c0e44594f Some work on JSSMOD loader. diff -r 47d8e5e0e592 -r f9bf71071f0b minijss/jloadjss.c --- 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: