aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLadislav Zezula <zezula@volny.cz>2023-07-08 15:23:46 +0200
committerGitHub <noreply@github.com>2023-07-08 15:23:46 +0200
commit88da19d3888b2966fc396da1093965e91e58b9d5 (patch)
treec141a26aed13787b8d058bbb28019b82ee4ec016
parentdca8554dd78a9a7f075b5b525637cef6763dcdf2 (diff)
parentff4f40f291c83728cad766350202c56a1b22c2d8 (diff)
Merge pull request #301 from ladislav-zezula/LZ_HeapOverflow
Fixed heap overflow
-rw-r--r--src/SBaseCommon.cpp6
-rw-r--r--src/SFileGetFileInfo.cpp4
-rwxr-xr-xtest/StormTest.cpp31
-rw-r--r--test/stormlib-test-001-linux.txt138
-rw-r--r--test/stormlib-test-001.txt6
5 files changed, 16 insertions, 169 deletions
diff --git a/src/SBaseCommon.cpp b/src/SBaseCommon.cpp
index 77590d6..b0029e0 100644
--- a/src/SBaseCommon.cpp
+++ b/src/SBaseCommon.cpp
@@ -999,18 +999,20 @@ void * LoadMpqTable(
LPBYTE pbCompressed = NULL;
LPBYTE pbMpqTable;
LPBYTE pbToRead;
- DWORD dwBytesToRead = dwCompressedSize;
+ DWORD dwBytesToRead = dwTableSize;
DWORD dwErrCode = ERROR_SUCCESS;
// Allocate the MPQ table
pbMpqTable = pbToRead = STORM_ALLOC(BYTE, dwTableSize);
if(pbMpqTable != NULL)
{
- // Check if the MPQ table is encrypted
+ // Check if the MPQ table is compressed
if(dwCompressedSize < dwTableSize)
{
// Allocate temporary buffer for holding compressed data
pbCompressed = pbToRead = STORM_ALLOC(BYTE, dwCompressedSize);
+ dwBytesToRead = dwCompressedSize;
+
if(pbCompressed == NULL)
{
STORM_FREE(pbMpqTable);
diff --git a/src/SFileGetFileInfo.cpp b/src/SFileGetFileInfo.cpp
index f9b9a76..2a4d7b3 100644
--- a/src/SFileGetFileInfo.cpp
+++ b/src/SFileGetFileInfo.cpp
@@ -564,11 +564,11 @@ static DWORD CreatePseudoFileName(HANDLE hFile, TFileEntry * pFileEntry, char *
bool WINAPI SFileGetFileName(HANDLE hFile, char * szFileName)
{
- TMPQFile * hf = (TMPQFile *)hFile; // MPQ File handle
+ TMPQFile * hf;
DWORD dwErrCode = ERROR_INVALID_HANDLE;
// Check valid parameters
- if(IsValidFileHandle(hFile))
+ if((hf = IsValidFileHandle(hFile)) != NULL)
{
TFileEntry * pFileEntry = hf->pFileEntry;
diff --git a/test/StormTest.cpp b/test/StormTest.cpp
index 7574efb..2bd5ceb 100755
--- a/test/StormTest.cpp
+++ b/test/StormTest.cpp
@@ -3870,30 +3870,11 @@ static DWORD TestReplaceFile(LPCTSTR szMpqPlainName, LPCTSTR szFilePlainName, LP
return dwErrCode;
}
-static DWORD Test_PlayingSpace()
+static void Test_PlayingSpace()
{
- BYTE PlainText1[0x1000];
- BYTE Compressed[0x1000];
- BYTE PlainText2[0x1000];
- int cbCompressed;
- int cbOutBuffer;
-
- // Prepare buffer that is hard to compress
- memset(PlainText1, 0x01, sizeof(PlainText1));
-
- // Compress the data
- cbOutBuffer = sizeof(Compressed);
- SCompCompress(Compressed, &cbOutBuffer, PlainText1, sizeof(PlainText1), MPQ_COMPRESSION_HUFFMANN | MPQ_COMPRESSION_ZLIB, 0, 0);
- cbCompressed = cbOutBuffer;
-
- // Decompress the data
- cbOutBuffer = sizeof(PlainText2);
- SCompDecompress(PlainText2, &cbOutBuffer, Compressed, cbCompressed);
- return ERROR_SUCCESS;
-
/*
// Check opening of a MPQ
- LPCTSTR szArchiveName = _T("e:\\Volcanis.scm");
+ LPCTSTR szArchiveName = _T("e:\\GreenTD.w3x");
LPBYTE pbBuffer = NULL;
HANDLE hFile = NULL;
HANDLE hMpq = NULL;
@@ -3901,7 +3882,7 @@ static DWORD Test_PlayingSpace()
if(SFileOpenArchive(szArchiveName, 0, 0, &hMpq))
{
- if(SFileOpenFileEx(hMpq, "staredit\\scenario.chk", 0, &hFile))
+ if(SFileOpenFileEx(hMpq, "File00000160.xxx", 0, &hFile))
{
if((dwFileSize = SFileGetFileSize(hFile, NULL)) != NULL)
{
@@ -3910,7 +3891,6 @@ static DWORD Test_PlayingSpace()
DWORD dwBytesRead = 0;
SFileReadFile(hFile, pbBuffer, dwFileSize, &dwBytesRead, NULL);
- assert(dwBytesRead == dwFileSize);
STORM_FREE(pbBuffer);
}
}
@@ -4109,7 +4089,6 @@ static const TEST_INFO TestList_MasterMirror[] =
static const TEST_INFO Test_OpenMpqs[] =
{
-
// Correct or damaged archives
{_T("MPQ_1997_v1_Diablo1_DIABDAT.MPQ"), NULL, "554b538541e42170ed41cb236483489e", 2910, &TwoFilesD1}, // Base MPQ from Diablo 1
{_T("MPQ_1997_v1_patch_rt_SC1B.mpq"), NULL, "43fe7d362955be68a708486e399576a7", 10}, // From Starcraft 1 BETA
@@ -4134,6 +4113,8 @@ static const TEST_INFO Test_OpenMpqs[] =
{_T("MPQ_2023_v1_StarcraftMap.scm"), NULL, "7830c51700697dd3c175f086a3157b29", 4}, // StarCraft map from StarCraft: Brood War 1.16
{_T("MPQ_2023_v1_BroodWarMap.scx"), NULL, "dd3afa3c2f5e562ce3ca91c0c605a71f", 3}, // Brood War map from StarCraft: Brood War 1.16
{_T("MPQ_2023_v1_Volcanis.scm"), NULL, "522c89ca96d6736427b01f7c80dd626f", 3}, // Map modified with unusual file compression: ZLIB+Huffman
+ {_T("MPQ_2023_v4_UTF8.s2ma"), NULL, "97b7a686650f3307d135e1d1b017a36a", 67}, // Map contaning files with Chinese names (UTF8-encoded)
+ {_T("MPQ_2023_v1_GreenTD.w3x"), NULL, "477af4ddf11eead1412d7c87cb81b530", 2004}, // Corrupt sector checksum table in file #A0
// Protected archives
{_T("MPQ_2002_v1_ProtectedMap_InvalidUserData.w3x"), NULL, "b900364cc134a51ddeca21a13697c3ca", 79},
@@ -4250,7 +4231,7 @@ static const TEST_INFO Test_ReplaceFile[] =
//-----------------------------------------------------------------------------
// Main
-#define TEST_COMMAND_LINE
+//#define TEST_COMMAND_LINE
#define TEST_LOCAL_LISTFILE
#define TEST_STREAM_OPERATIONS
#define TEST_MASTER_MIRROR
diff --git a/test/stormlib-test-001-linux.txt b/test/stormlib-test-001-linux.txt
deleted file mode 100644
index 97ffef9..0000000
--- a/test/stormlib-test-001-linux.txt
+++ /dev/null
@@ -1,138 +0,0 @@
-==== Test Suite for StormLib version 9.25 ====
-InitWorkFolder: Work directory /media/ladik/MPQs (default)
-TestLiFiSearch (FLAT-MAP:ListFile_Blizzard.txt) succeeded.
-TestLiFiSearch (ListFile_Blizzard.txt) succeeded.
-TestFileStream (MPQ_2013_v4_alternate-original.MPQ) succeeded.
-TestFileStream (MPQ_2013_v4_alternate-original.MPQ) succeeded.
-TestFileStream (MPQ_2013_v4_alternate-complete.MPQ) succeeded.
-TestFileStream (part-file://MPQ_2009_v2_WoW_patch.MPQ.part) succeeded.
-TestFileStream (blk4-file://streaming/model.MPQ.0) succeeded.
-TestFileStream (mpqe-file://MPQ_2011_v2_EncryptedMpq.MPQE) succeeded.
-TestFileMirror (part-file://MPQ_2009_v1_patch-created.MPQ.part) succeeded.
-TestFileMirror (part-file://MPQ_2009_v1_patch-partial.MPQ.part) succeeded.
-TestFileMirror (part-file://MPQ_2009_v1_patch-complete.MPQ.part) succeeded.
-TestFileMirror (MPQ_2013_v4_alternate-created.MPQ) succeeded.
-TestFileMirror (MPQ_2013_v4_alternate-incomplete.MPQ) succeeded.
-TestFileMirror (MPQ_2013_v4_alternate-complete.MPQ) succeeded.
-TestReadingMpq (MPQ_1997_v1_Diablo1_DIABDAT.MPQ) succeeded.
-TestReadingMpq (MPQ_1997_v1_patch_rt_SC1B.mpq) succeeded.
-TestReadingMpq (MPQ_1997_v1_StarDat_SC1B.mpq) succeeded.
-TestReadingMpq (MPQ_1997_v1_INSTALL_SC1B.EXE_) succeeded.
-TestReadingMpq: Warning: CRC32 error on (signature)
-TestReadingMpq: Warning: CRC32 error on (signature)
-TestReadingMpq (MPQ_2016_v1_D2XP_IX86_1xx_114a.mpq) succeeded.
-TestReadingMpq (MPQ_2018_v1_icon_error.w3m) succeeded.
-TestReadingMpq (MPQ_1997_v1_Diablo1_STANDARD.SNP) succeeded.
-TestReadingMpq (MPQ_2012_v2_EmptyMpq.MPQ) succeeded.
-TestReadingMpq (MPQ_2013_v4_EmptyMpq.MPQ) succeeded.
-TestReadingMpq (MPQ_2013_v4_patch-base-16357.MPQ) succeeded.
-TestReadingMpq (MPQ_2011_v4_InvalidHetEntryCount.MPQ) succeeded.
-TestReadingMpq (MPQ_2002_v1_BlockTableCut.MPQ) succeeded.
-TestReadingMpq (MPQ_2010_v2_HasUserData.s2ma) succeeded.
-TestReadingMpq: Warning: CRC32 error on (listfile)
-TestReadingMpq: Warning: CRC32 error on (listfile)
-TestReadingMpq: Warning: CRC32 error on File00000003.xxx
-TestReadingMpq (MPQ_2014_v1_AttributesOneEntryLess.w3x) succeeded.
-TestReadingMpq (MPQ_2020_v1_AHF04patch.mix) succeeded.
-TestReadingMpq (MPQ_2010_v3_expansion-locale-frFR.MPQ) succeeded.
-TestReadingMpq (mpqe-file://MPQ_2011_v2_EncryptedMpq.MPQE) succeeded.
-TestReadingMpq (part-file://MPQ_2010_v2_HashTableCompressed.MPQ.part) succeeded.
-TestReadingMpq (blk4-file://streaming/model.MPQ.0) succeeded.
-TestReadingMpq: Warning: CRC32 error on replay.message.events
-TestReadingMpq (MPQ_2023_v2_MemoryCorruption.SC2Replay) succeeded.
-TestReadingMpq (MPQ_2023_v1_StarcraftMap.scm) succeeded.
-TestReadingMpq (MPQ_2023_v1_BroodWarMap.scx) succeeded.
-TestReadingMpq (MPQ_2023_v1_Volcanis.scm) succeeded.
-TestReadingMpq (MPQ_2002_v1_ProtectedMap_InvalidUserData.w3x) succeeded.
-TestReadingMpq (MPQ_2002_v1_ProtectedMap_InvalidMpqFormat.w3x) succeeded.
-TestReadingMpq (MPQ_2002_v1_ProtectedMap_Spazzler.w3x) succeeded.
-TestReadingMpq (MPQ_2014_v1_ProtectedMap_Spazzler2.w3x) succeeded.
-TestReadingMpq (MPQ_2014_v1_ProtectedMap_Spazzler3.w3x) succeeded.
-TestReadingMpq (MPQ_2002_v1_ProtectedMap_BOBA.w3m) succeeded.
-TestReadingMpq (MPQ_2015_v1_ProtectedMap_KangTooJee.w3x) succeeded.
-TestReadingMpq (MPQ_2015_v1_ProtectedMap_Somj2hM16.w3x) succeeded.
-TestReadingMpq (MPQ_2015_v1_ProtectedMap_Spazy.w3x) succeeded.
-TestReadingMpq (MPQ_2015_v1_MessListFile.mpq) succeeded.
-TestReadingMpq (MPQ_2016_v1_ProtectedMap_TableSizeOverflow.w3x) succeeded.
-TestReadingMpq (MPQ_2016_v1_ProtectedMap_HashOffsIsZero.w3x) succeeded.
-TestReadingMpq (MPQ_2016_v1_ProtectedMap_Somj2.w3x) succeeded.
-TestReadingMpq (MPQ_2016_v1_WME4_4.w3x) succeeded.
-TestReadingMpq (MPQ_2016_v1_SP_(4)Adrenaline.w3x) succeeded.
-TestReadingMpq (MPQ_2016_v1_ProtectedMap_1.4.w3x) succeeded.
-TestReadingMpq (MPQ_2016_v1_KoreanFile.w3m) succeeded.
-TestReadingMpq (MPQ_2017_v1_Eden_RPG_S2_2.5J.w3x) succeeded.
-TestReadingMpq (MPQ_2017_v1_BigDummyFiles.w3x) succeeded.
-TestReadingMpq (MPQ_2017_v1_TildeInFileName.mpq) succeeded.
-TestReadingMpq (MPQ_2018_v1_EWIX_v8_7.w3x) succeeded.
-TestReadingMpq (MPQ_2020_v4_FakeMpqHeaders.SC2Mod) succeeded.
-TestReadingMpq (MPQ_2020_v4_NP_Protect_1.s2ma) succeeded.
-TestReadingMpq (MPQ_2020_v4_NP_Protect_2.s2ma) succeeded.
-TestReadingMpq (MPQ_2015_v1_flem1.w3x) succeeded.
-TestReadingMpq (MPQ_2002_v1_ProtectedMap_HashTable_FakeValid.w3x) succeeded.
-TestReadingMpq (MPQ_2021_v1_CantExtractCHK.scx) succeeded.
-TestReadingMpq (MPQ_2022_v1_Sniper.scx) succeeded.
-TestReadingMpq (MPQ_2022_v1_OcOc_Bound_2.scx) succeeded.
-TestReadingMpq (MPQ_2020_v1_HS0.1.asi) succeeded.
-TestReadingMpq (MPQ_2022_v1_hs0.8.asi) succeeded.
-TestReadingMpq (MPQ_2022_v1_MoeMoeMod.asi) succeeded.
-TestReadingMpq (MPx_2013_v1_LongwuOnline.mpk) succeeded.
-TestReadingMpq (MPx_2013_v1_WarOfTheImmortals.sqp) succeeded.
-TestReadingMpq (MPx_2022_v1_Music.mpk) succeeded.
-TestReadingMpq (MPx_2022_v1_Scp.mpk) succeeded.
-TestReadingMpq (MPx_2022_v1_UI.mpk) succeeded.
-TestReadingMpq (MPQ_1998_v1_StarCraft.mpq) succeeded.
-TestReadingMpq (MPQ_2012_v4_OldWorld.MPQ) succeeded.
-TestReadingMpq (MPQ_2013_v4_world.MPQ) succeeded.
-TestReadingMpq (MPQ_2013_v4_locale-enGB.MPQ) succeeded.
-TestReadingMpq (MPQ_2013_v4_Base1.SC2Data) succeeded.
-TestReadingMpq (MPQ_2013_v4_Mods#Core.SC2Mod#enGB.SC2Assets) succeeded.
-TestReadingMpq (MPQ_2013_v4_Base1.SC2Data) succeeded.
-TestReadingMpq (MPQ_2013_v4_Base3.SC2Maps) succeeded.
-TestReadingMpq (MPQ_2013_v4_Mods#Liberty.SC2Mod#enGB.SC2Data) succeeded.
-TestReadingMpq (MPQ_2014_v4_base-Win.MPQ) succeeded.
-TestReadingMpq (MPQ_2014_v4_base-Win.MPQ) succeeded.
-TestReadingMpq (MPQ_1997_v1_Diablo1_STANDARD.SNP) succeeded.
-TestReadingMpq (MPQ_1999_v1_WeakSignature.exe) succeeded.
-TestReadingMpq (MPQ_2003_v1_WeakSignatureEmpty.exe) succeeded.
-TestReadingMpq (MPQ_2002_v1_StrongSignature.w3m) succeeded.
-TestReadingMpq (MPQ_1998_v1_StarDat.mpq) succeeded.
-TestReadingMpq (MPQ_1999_v1_WeakSignature.exe) succeeded.
-TestReadingMpq (flat-file://streaming/model.MPQ.0) succeeded.
-TestReadingMpq (MPQ_2013_vX_Battle.net.MPQ) succeeded.
-TestReadingMpq (MPQ_1997_v1_Diablo1_DIABDAT.MPQ) succeeded.
-TestReadingMpq (MPQ_1997_v1_Diablo1_DIABDAT.MPQ) succeeded.
-TestReadingMpq (MPQ_2002_v1_StrongSignature.w3m) succeeded.
-TestReadingMpq (MPQ_2013_v4_SC2_EmptyMap.SC2Map) succeeded.
-Test_ReopenMpq (MPQ_2010_v3_expansion-locale-frFR.MPQ) succeeded.
-Test_ReopenMpq (MPQ_2016_v1_00000.pak) succeeded.
-Test_ReopenMpq (MPQ_2013_v4_SC2_EmptyMap.SC2Map) succeeded.
-Test_ReopenMpq (MPQ_2013_v4_expansion1.MPQ) succeeded.
-Test_ReopenMpq (MPQ_2014_v1_out1.w3x) succeeded.
-Test_ReopenMpq (MPQ_2014_v1_out2.w3x) succeeded.
-Test_ReopenMpq (MPQ_1997_v1_Diablo1_DIABDAT.MPQ) succeeded.
-Test_ReopenMpq (MPQ_2013_v4_SC2_EmptyMap.SC2Map) succeeded.
-Test_Signature (MPQ_1999_v1_WeakSigned1.mpq) succeeded.
-Test_Signature (MPQ_1999_v1_WeakSigned1.mpq) succeeded.
-TestModifyMpq (MPQ_2014_v4_Base.StormReplay) succeeded.
-TestModifyMpq (MPQ_2022_v1_v4.329.w3x) succeeded.
-TestModifyMpq (MPQ_2023_v1_StarcraftMap.scm) succeeded.
-TestVerifyHash succeeded.
-CreateEmptyMpq (StormLibTest_EmptyMpq_v2.mpq) succeeded.
-CreateEmptyMpq (StormLibTest_EmptyMpq_v4.mpq) succeeded.
-TestCreateGaps (StormLibTest_GapsTest.mpq) succeeded.
-TestNonStdNames (StormLibTest_NonStdNames.mpq) succeeded.
-CreateMpqEditor (StormLibTest_MpqEditorTest.mpq) succeeded.
-TestCreateFull (StormLibTest_FileTableFull.mpq) succeeded.
-TestCreateFull (StormLibTest_FileTableFull.mpq) succeeded.
-TestCreateFull (StormLibTest_FileTableFull.mpq) succeeded.
-TestCreateFull (StormLibTest_FileTableFull.mpq) succeeded.
-IncMaxFileCount (StormLibTest_IncMaxFileCount.mpq) succeeded.
-MpqUnicodeName succeeded.
-TestFileFlag (StormLibTest_FileFlagTest.mpq) succeeded.
-TestCompressions: Warning: CRC32 error on WaveFile_01.wav
-TestCompressions: Warning: CRC32 error on WaveFile_02.wav
-TestCompressions (StormLibTest_AddWaveMonoBadTest.mpq) succeeded.
-TestCompressions: Warning: CRC32 error on WaveFile_01.wav
-TestCompressions: Warning: CRC32 error on WaveFile_02.wav
-ListFilePos (StormLibTest_ListFilePos.mpq) succeeded.
-TestBigArchive (StormLibTest_BigArchive_v4.mpq) succeeded. \ No newline at end of file
diff --git a/test/stormlib-test-001.txt b/test/stormlib-test-001.txt
index 06c218d..1f2be43 100644
--- a/test/stormlib-test-001.txt
+++ b/test/stormlib-test-001.txt
@@ -1,7 +1,7 @@
==== Test Suite for StormLib version 9.25 ====
InitWorkFolder: Work directory \Multimedia\MPQs (default)
-TestLiFiSearch (FLAT-MAP:ListFile_Blizzard.txt) succeeded.
-TestLiFiSearch (ListFile_Blizzard.txt) succeeded.
+TestLiFiSearch (FLAT-MAP:listfile-test.txt) succeeded.
+TestLiFiSearch (listfile-test.txt) succeeded.
TestFileStream (MPQ_2013_v4_alternate-original.MPQ) succeeded.
TestFileStream (MPQ_2013_v4_alternate-original.MPQ) succeeded.
TestFileStream (MPQ_2013_v4_alternate-complete.MPQ) succeeded.
@@ -43,6 +43,8 @@ TestReadingMpq (MPQ_2023_v2_MemoryCorruption.SC2Replay) succeeded.
TestReadingMpq (MPQ_2023_v1_StarcraftMap.scm) succeeded.
TestReadingMpq (MPQ_2023_v1_BroodWarMap.scx) succeeded.
TestReadingMpq (MPQ_2023_v1_Volcanis.scm) succeeded.
+TestReadingMpq (MPQ_2023_v4_UTF8.s2ma) succeeded.
+TestReadingMpq (MPQ_2023_v1_GreenTD.w3x) succeeded.
TestReadingMpq (MPQ_2002_v1_ProtectedMap_InvalidUserData.w3x) succeeded.
TestReadingMpq (MPQ_2002_v1_ProtectedMap_InvalidMpqFormat.w3x) succeeded.
TestReadingMpq (MPQ_2002_v1_ProtectedMap_Spazzler.w3x) succeeded.