diff --git a/Libraries/FileHandler/iff/iff.h b/Libraries/FileHandler/iff/iff.h index 40aafcb..90c1289 100644 --- a/Libraries/FileHandler/iff/iff.h +++ b/Libraries/FileHandler/iff/iff.h @@ -118,6 +118,8 @@ typedef struct IFFSprite_s uint16_t Width; uint8_t * IndexData; uint8_t * BGRA32Data; + + uint8_t InvalidDimensions; } IFFSprite; typedef struct IFFSpriteList_s diff --git a/Libraries/FileHandler/iff/spr.c b/Libraries/FileHandler/iff/spr.c index 3ec1532..e22dc69 100644 --- a/Libraries/FileHandler/iff/spr.c +++ b/Libraries/FileHandler/iff/spr.c @@ -117,11 +117,15 @@ int iff_parse_spr(IFFChunk * ChunkInfo, const uint8_t * Buffer){ if(SpriteSize > b.Size || SpriteSize < 10) return 0; } + Sprite->Reserved = read_uint32xe(&b); Sprite->Height = read_uint16xe(&b); Sprite->Width = read_uint16xe(&b); - if(Sprite->Reserved != 0 || Sprite->Height == 0 || Sprite->Width == 0 || Sprite->Height > UINT_MAX/Sprite->Width/2) - return 0; + if(Sprite->Reserved != 0 || Sprite->Height == 0 || Sprite->Width == 0 || Sprite->Height > UINT_MAX/Sprite->Width/2){ + /* This happens in the third sprite of every SPR# chunk in sprites.iff */ + Sprite->InvalidDimensions = 1; + continue; + } Sprite->IndexData = calloc(Sprite->Height*Sprite->Width, 2); if(Sprite->IndexData == NULL) return 0; @@ -229,6 +233,7 @@ int iff_depalette(IFFSprite * Sprite, const IFFPalette * Palette){ uint8_t Index = Sprite->IndexData[2*i + 0]; if(Index >= Palette->ColorCount){ free(Sprite->BGRA32Data); + Sprite->BGRA32Data = NULL; return 0; } Sprite->BGRA32Data[4*i + 0] = Palette->Data[3*Index + 2]; diff --git a/Tools/iff2html/iff2html.c b/Tools/iff2html/iff2html.c index 64c3403..421a05f 100644 --- a/Tools/iff2html/iff2html.c +++ b/Tools/iff2html/iff2html.c @@ -309,13 +309,13 @@ int main(int argc, char *argv[]){ if(!strcmp(ChunkData->Type, "BMP_") || !strcmp(ChunkData->Type, "FBMP")){ size_t Width, Height; char filename[32]; - sprintf(filename, "%simg_%u_%.4x.png", OutDir, c, ChunkData->ChunkID); + sprintf(filename, "%sbmp_%u_%.4x.png", OutDir, c+1, ChunkData->ChunkID); if(WritePNG(filename, ChunkData, NULL, &Width, &Height)){ fprintf(hFile, "
Image |
---|
![]() |
![]() |