diff options
author | Ladislav Zezula <zezula@volny.cz> | 2024-04-21 18:45:43 +0200 |
---|---|---|
committer | Ladislav Zezula <zezula@volny.cz> | 2024-04-21 18:45:43 +0200 |
commit | dccc1068b0246697b70af2d7b6f8f7418d623324 (patch) | |
tree | daf870e273cfa094e13cd976799bf7f6a6f276f0 | |
parent | 355665c0ab214cae667681858cc1d8c3b0a41d4a (diff) |
Fixed division by zero in https://github.com/ladislav-zezula/StormLib/issues/334
-rw-r--r-- | src/FileStream.cpp | 2 | ||||
-rwxr-xr-x | test/StormTest.cpp | 1 |
2 files changed, 2 insertions, 1 deletions
diff --git a/src/FileStream.cpp b/src/FileStream.cpp index bc5618e..b66098c 100644 --- a/src/FileStream.cpp +++ b/src/FileStream.cpp @@ -1198,7 +1198,7 @@ static bool FlatStream_LoadBitmap(TBlockStream * pStream) BSWAP_ARRAY32_UNSIGNED((LPDWORD)(&Footer), sizeof(FILE_BITMAP_FOOTER));
// Verify if there is actually a footer
- if(Footer.Signature == ID_FILE_BITMAP_FOOTER && Footer.Version == 0x03)
+ if(Footer.Signature == ID_FILE_BITMAP_FOOTER && Footer.Version == 0x03 && Footer.BlockSize != 0)
{
// Get the offset of the bitmap, number of blocks and size of the bitmap
ByteOffset = MAKE_OFFSET64(Footer.MapOffsetHi, Footer.MapOffsetLo);
diff --git a/test/StormTest.cpp b/test/StormTest.cpp index eeb0a24..84ed667 100755 --- a/test/StormTest.cpp +++ b/test/StormTest.cpp @@ -4008,6 +4008,7 @@ static const TEST_INFO1 Test_OpenMpqs[] = //{_T("pocs/MPQ_2024_04_HeapOverflow.mpq"), NULL, "--------------------------------", TFLG_WILL_FAIL},
//{_T("pocs/MPQ_2024_05_HeapOverflow.mpq"), NULL, "0539ae020719654a0ea6e2627a8195f8", 14},
{_T("pocs/MPQ_2024_06_HeapOverflowReadFile.mpq"), NULL, "d41d8cd98f00b204e9800998ecf8427e", 1},
+ {_T("pocs/MPQ_2024_07_InvalidBitmapFooter.mpq"), NULL, "--------------------------------", TFLG_WILL_FAIL},
// Correct or damaged archives
{_T("MPQ_1997_v1_Diablo1_DIABDAT.MPQ"), NULL, "554b538541e42170ed41cb236483489e", 2910, &TwoFilesD1}, // Base MPQ from Diablo 1
|