From dccc1068b0246697b70af2d7b6f8f7418d623324 Mon Sep 17 00:00:00 2001 From: Ladislav Zezula Date: Sun, 21 Apr 2024 18:45:43 +0200 Subject: Fixed division by zero in https://github.com/ladislav-zezula/StormLib/issues/334 --- src/FileStream.cpp | 2 +- test/StormTest.cpp | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) 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 -- cgit v1.2.3