From 5720fe3646f6fa602224b221a34c9dc0670fbaa8 Mon Sep 17 00:00:00 2001 From: Ladislav Zezula Date: Thu, 8 Jun 2023 16:44:10 +0200 Subject: Fixed handling of the stream end in Huffmann decompression --- src/huffman/huff.cpp | 59 +++++++++--------- src/huffman/huff.h | 2 +- test/StormTest.cpp | 169 +++++++++++++++++++++++++++++++++++---------------- 3 files changed, 149 insertions(+), 81 deletions(-) diff --git a/src/huffman/huff.cpp b/src/huffman/huff.cpp index 6930354..1b81017 100644 --- a/src/huffman/huff.cpp +++ b/src/huffman/huff.cpp @@ -269,24 +269,6 @@ TInputStream::TInputStream(void * pvInBuffer, size_t cbInBuffer) BitCount = 0; } -// Gets 7 bits from the stream. DOES NOT remove the bits from input stream -unsigned int TInputStream::Peek7Bits() -{ - unsigned int dwReloadByte = 0; - - // If there is not enough bits to get the value, - // we have to add 8 more bits from the input buffer - if(BitCount < 7) - { - dwReloadByte = *pbInBuffer++; - BitBuffer |= dwReloadByte << BitCount; - BitCount += 8; - } - - // Return the first available 7 bits. DO NOT remove them from the input stream - return (BitBuffer & 0x7F); -} - // Gets one bit from input stream unsigned int TInputStream::Get1Bit() { @@ -330,6 +312,30 @@ unsigned int TInputStream::Get8Bits() return dwOneByte; } +// Gets 7 bits from the stream. DOES NOT remove the bits from input stream +bool TInputStream::Peek7Bits(unsigned int & Value) +{ + unsigned int Value8Bits = 0; + + // If there is not enough bits to get the value, + // we have to add 8 more bits from the input buffer + if(BitCount < 7) + { + // Load additional 8 bits. Be careful if we have no more data + if(pbInBuffer >= pbInBufferEnd) + return false; + Value8Bits = *pbInBuffer++; + + // Add these 8 bits to the bit buffer + BitBuffer |= Value8Bits << BitCount; + BitCount += 8; + } + + // Return 7 bits of data. DO NOT remove them from the input stream + Value = (BitBuffer & 0x7F); + return true; +} + void TInputStream::SkipBits(unsigned int dwBitsToSkip) { unsigned int dwReloadByte = 0; @@ -696,16 +702,13 @@ unsigned int THuffmannTree::DecodeOneByte(TInputStream * is) THTreeItem * pItem; unsigned int ItemLinkIndex; unsigned int BitCount = 0; + bool bHasItemLinkIndex; - // Check for the end of the input stream - if(is->pbInBuffer >= is->pbInBufferEnd && is->BitCount < 7) - return 0x1FF; - - // Get the eventual quick-link index - ItemLinkIndex = is->Peek7Bits(); + // Try to retrieve quick link index + bHasItemLinkIndex = is->Peek7Bits(ItemLinkIndex); // Is the quick-link item valid? - if(QuickLinks[ItemLinkIndex].ValidValue > MinValidValue) + if(bHasItemLinkIndex && QuickLinks[ItemLinkIndex].ValidValue > MinValidValue) { // If that item needs less than 7 bits, we can get decompressed value directly if(QuickLinks[ItemLinkIndex].ValidBits <= 7) @@ -745,7 +748,7 @@ unsigned int THuffmannTree::DecodeOneByte(TInputStream * is) // If we didn't get the item from the quick-link array, // set the entry in it - if(QuickLinks[ItemLinkIndex].ValidValue < MinValidValue) + if(bHasItemLinkIndex && QuickLinks[ItemLinkIndex].ValidValue < MinValidValue) { // If the current compressed byte was more than 7 bits, // set a quick-link item with pointer to tree item @@ -876,10 +879,10 @@ unsigned int THuffmannTree::Decompress(void * pvOutBuffer, unsigned int cbOutLen IncWeightsAndRebalance(ItemsByByte[DecompressedValue]); } - // A byte successfully decoded - store it in the output stream - *pbOutBuffer++ = (unsigned char)DecompressedValue; + // Store the byte to the output stream if(pbOutBuffer >= pbOutBufferEnd) break; + *pbOutBuffer++ = (unsigned char)DecompressedValue; if(bIsCmp0) { diff --git a/src/huffman/huff.h b/src/huffman/huff.h index b75acbb..cf1ca4c 100644 --- a/src/huffman/huff.h +++ b/src/huffman/huff.h @@ -29,8 +29,8 @@ class TInputStream TInputStream(void * pvInBuffer, size_t cbInBuffer); unsigned int Get1Bit(); - unsigned int Peek7Bits(); unsigned int Get8Bits(); + bool Peek7Bits(unsigned int & Value); void SkipBits(unsigned int BitCount); unsigned char * pbInBufferEnd; // End position in the the input buffer diff --git a/test/StormTest.cpp b/test/StormTest.cpp index a65430d..9cc0dcf 100755 --- a/test/StormTest.cpp +++ b/test/StormTest.cpp @@ -126,6 +126,7 @@ static const TCHAR PATH_SEPARATOR = '/'; // Path separator for Non-Wi // Global for the work MPQ static LPCTSTR szMpqSubDir = _T("1995 - Test MPQs"); +static TCHAR szDataFileDir[MAX_PATH] = {0}; static TCHAR szListFileDir[MAX_PATH] = {0}; static TCHAR szMpqPatchDir[MAX_PATH] = {0}; @@ -851,6 +852,16 @@ static DWORD FindListFileFolder(LPCTSTR szFullPath, void * /* lpContext */) { LPCTSTR szPlainName = GetPlainFileName(szFullPath); + // Check data file dir + if(szDataFileDir[0] == 0) + { + if(!_tcsnicmp(szPlainName, _T("addfiles-"), 9)) + { + StringCopy(szDataFileDir, _countof(szDataFileDir), GetRelativePath(szFullPath)); + return ERROR_SUCCESS; + } + } + // Check listfile directory if(szListFileDir[0] == 0) { @@ -913,6 +924,8 @@ static DWORD InitializeMpqDirectory(TCHAR * argv[], int argc) // Find the listfile directory within the MPQ directory CreateFullPathName(szFullPath, _countof(szFullPath), NULL, szMpqSubDir); FindFilesInternal(FindListFileFolder, NULL, szFullPath, NULL); + if(szDataFileDir[0] == 0) + return Logger.PrintError(_T("Data files folder was not found in the MPQ directory")); if(szListFileDir[0] == 0) return Logger.PrintError(_T("Listfile folder was not found in the MPQ directory")); if(szMpqPatchDir[0] == 0) @@ -3392,8 +3405,8 @@ static DWORD TestCreateArchive_FileFlagTest(LPCTSTR szPlainName) DWORD dwErrCode; // Create paths for local file to be added - CreateFullPathName(szFileName1, _countof(szFileName1), szMpqSubDir, _T("AddFile.exe")); - CreateFullPathName(szFileName2, _countof(szFileName2), szMpqSubDir, _T("AddFile.bin")); + CreateFullPathName(szFileName1, _countof(szFileName1), szDataFileDir, _T("new-file.exe")); + CreateFullPathName(szFileName2, _countof(szFileName2), szDataFileDir, _T("new-file.bin")); // Create an empty file that will serve as holder for the MPQ dwErrCode = CreateEmptyFile(&Logger, szPlainName, 0x100000, szFullPath); @@ -3546,7 +3559,7 @@ static DWORD TestCreateArchive_WaveCompressionsTest(LPCTSTR szPlainName, LPCTSTR DWORD dwErrCode; // Create paths for local file to be added - CreateFullPathName(szFileName, _countof(szFileName), szMpqSubDir, szWaveFile); + CreateFullPathName(szFileName, _countof(szFileName), szDataFileDir, szWaveFile); // Create new archive dwErrCode = CreateNewArchive(&Logger, szPlainName, MPQ_CREATE_ARCHIVE_V1 | MPQ_CREATE_LISTFILE | MPQ_CREATE_ATTRIBUTES, 0x40, &hMpq); @@ -3737,29 +3750,31 @@ static DWORD TestCreateArchive_BigArchive(LPCTSTR szPlainName) return dwErrCode; } -// "MPQ_2014_v4_Heroes_Replay.MPQ", "AddFile-replay.message.events" -static DWORD TestModifyArchive_ReplaceFile(LPCTSTR szMpqPlainName, LPCTSTR szFilePlainName) +// Test replacing a file in an archive +static DWORD TestReplaceFile(LPCTSTR szMpqPlainName, LPCTSTR szFilePlainName, LPCSTR szFileFlags, DWORD dwCompression) { TLogHelper Logger("TestModifyMpq", szMpqPlainName); HANDLE hMpq = NULL; TCHAR szFileFullName[MAX_PATH]; TCHAR szMpqFullName[MAX_PATH]; char szArchivedName[MAX_PATH]; - size_t nOffset = 0; DWORD dwErrCode; + DWORD dwFileFlags = (DWORD)(DWORD_PTR)(szFileFlags); // szFileFlags is a file flags cast to LPCSTR BYTE md5_file_in_mpq1[MD5_DIGEST_SIZE]; BYTE md5_file_in_mpq2[MD5_DIGEST_SIZE]; BYTE md5_file_in_mpq3[MD5_DIGEST_SIZE]; BYTE md5_file_local[MD5_DIGEST_SIZE]; - // Get the name of archived file as plain text - if(!_tcsnicmp(szFilePlainName, _T("AddFile-"), 8)) - nOffset = 8; - StringCopy(szArchivedName, _countof(szArchivedName), szFilePlainName + nOffset); + // Get the name of archived file as plain text. If the file shall be in a subfolder, + // its name must contain a hashtag, e.g. "staredit#scenario.chk" + StringCopy(szArchivedName, _countof(szArchivedName), szFilePlainName); + for(size_t i = 0; szArchivedName[i] != 0; i++) + szArchivedName[i] = (szArchivedName[i] == '#') ? '\\' : szArchivedName[i]; // Get the full path of the archive and local file - CreateFullPathName(szFileFullName, _countof(szFileFullName), szMpqSubDir, szFilePlainName); + CreateFullPathName(szFileFullName, _countof(szFileFullName), szDataFileDir, szFilePlainName); CreateFullPathName(szMpqFullName, _countof(szMpqFullName), NULL, szMpqPlainName); + dwFileFlags |= MPQ_FILE_REPLACEEXISTING | MPQ_FILE_COMPRESS; // Open an existing archive dwErrCode = OpenExistingArchiveWithCopy(&Logger, szMpqPlainName, szMpqPlainName, &hMpq); @@ -3783,8 +3798,8 @@ static DWORD TestModifyArchive_ReplaceFile(LPCTSTR szMpqPlainName, LPCTSTR szFil dwErrCode = AddLocalFileToMpq(&Logger, hMpq, szArchivedName, szFileFullName, - MPQ_FILE_REPLACEEXISTING | MPQ_FILE_COMPRESS | MPQ_FILE_SINGLE_UNIT, - MPQ_COMPRESSION_ZLIB, + dwFileFlags, + dwCompression, true); } @@ -3823,6 +3838,7 @@ static DWORD TestModifyArchive_ReplaceFile(LPCTSTR szMpqPlainName, LPCTSTR szFil // For that reason, we ignore the result of SFileCompactArchive(). SFileCompactArchive(hMpq, NULL, 0); SFileCloseArchive(hMpq); + hMpq = NULL; } // Try to open the archive again. Ignore the previous errors @@ -3844,12 +3860,67 @@ static DWORD TestModifyArchive_ReplaceFile(LPCTSTR szMpqPlainName, LPCTSTR szFil } SFileCloseArchive(hMpq); + hMpq = NULL; } } + // Finally, close the archive + if(hMpq != NULL) + SFileCloseArchive(hMpq); return dwErrCode; } +static DWORD 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"); + LPBYTE pbBuffer = NULL; + HANDLE hFile = NULL; + HANDLE hMpq = NULL; + DWORD dwFileSize; + + if(SFileOpenArchive(szArchiveName, 0, 0, &hMpq)) + { + if(SFileOpenFileEx(hMpq, "staredit\\scenario.chk", 0, &hFile)) + { + if((dwFileSize = SFileGetFileSize(hFile, NULL)) != NULL) + { + if((pbBuffer = STORM_ALLOC(BYTE, dwFileSize)) != NULL) + { + DWORD dwBytesRead = 0; + + SFileReadFile(hFile, pbBuffer, dwFileSize, &dwBytesRead, NULL); + assert(dwBytesRead == dwFileSize); + STORM_FREE(pbBuffer); + } + } + SFileCloseFile(hFile); + } + SFileCloseArchive(hMpq); + } +*/ +} + //----------------------------------------------------------------------------- // Tables @@ -4062,6 +4133,7 @@ static const TEST_INFO Test_OpenMpqs[] = {_T("MPQ_2023_v2_MemoryCorruption.SC2Replay"), NULL, "4cf5021aa272298e64712a378a50df44", 10}, // MPQ archive v 2.0, archive size is wrong {_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 // Protected archives {_T("MPQ_2002_v1_ProtectedMap_InvalidUserData.w3x"), NULL, "b900364cc134a51ddeca21a13697c3ca", 79}, @@ -4161,11 +4233,18 @@ static const TEST_INFO Test_ReopenMpqs[] = }; -// TODO: Include this in the CreateArchive tests +// Tests for signature file static const TEST_INFO Test_Signature[] = { - {_T("MPQ_1999_v1_WeakSigned1.mpq"), NULL, NULL, SFLAG_CREATE_ARCHIVE | SFLAG_SIGN_AT_CREATE | SFLAG_MODIFY_ARCHIVE | SFLAG_SIGN_ARCHIVE | SFLAG_VERIFY_AFTER}, - {_T("MPQ_1999_v1_WeakSigned1.mpq"), NULL, NULL, SFLAG_CREATE_ARCHIVE | SFLAG_MODIFY_ARCHIVE | SFLAG_SIGN_ARCHIVE | SFLAG_VERIFY_AFTER}, + {_T("MPQ_1999_v1_WeakSigned1.mpq"), NULL, NULL, SFLAG_CREATE_ARCHIVE | SFLAG_SIGN_AT_CREATE | SFLAG_MODIFY_ARCHIVE | SFLAG_SIGN_ARCHIVE | SFLAG_VERIFY_AFTER}, + {_T("MPQ_1999_v1_WeakSigned1.mpq"), NULL, NULL, SFLAG_CREATE_ARCHIVE | SFLAG_MODIFY_ARCHIVE | SFLAG_SIGN_ARCHIVE | SFLAG_VERIFY_AFTER}, +}; + +static const TEST_INFO Test_ReplaceFile[] = +{ + {_T("MPQ_2014_v4_Base.StormReplay"), _T("replay.message.events"), (LPCSTR)(MPQ_FILE_SINGLE_UNIT), MPQ_COMPRESSION_ZLIB}, + {_T("MPQ_2022_v1_v4.329.w3x"), _T("war3map.j"), (LPCSTR)(MPQ_FILE_SINGLE_UNIT), MPQ_COMPRESSION_ZLIB}, + {_T("MPQ_2023_v1_StarcraftMap.scm"), _T("staredit#scenario.chk"), NULL, MPQ_COMPRESSION_ZLIB | MPQ_COMPRESSION_HUFFMANN}, }; //----------------------------------------------------------------------------- @@ -4178,6 +4257,7 @@ static const TEST_INFO Test_Signature[] = #define TEST_OPEN_MPQ #define TEST_REOPEN_MPQ #define TEST_VERIFY_SIGNATURE +#define TEST_REPLACE_FILE int _tmain(int argc, TCHAR * argv[]) { @@ -4190,34 +4270,10 @@ int _tmain(int argc, TCHAR * argv[]) // Initialize storage and mix the random number generator printf("==== Test Suite for StormLib version %s ====\n", STORMLIB_VERSION_STRING); dwErrCode = InitializeMpqDirectory(argv, argc); -/* - // Check opening of a MPQ - LPCTSTR szArchiveName = _T("e:\\Volcanis.scm"); - LPBYTE pbBuffer = NULL; - HANDLE hFile = NULL; - HANDLE hMpq = NULL; - DWORD dwFileSize; - if(SFileOpenArchive(szArchiveName, 0, 0, &hMpq)) - { - if(SFileOpenFileEx(hMpq, "staredit\\scenario.chk", 0, &hFile)) - { - if((dwFileSize = SFileGetFileSize(hFile, NULL)) != NULL) - { - if((pbBuffer = STORM_ALLOC(BYTE, dwFileSize)) != NULL) - { - DWORD dwBytesRead = 0; + // Placeholder function for various testing purposes + Test_PlayingSpace(); - SFileReadFile(hFile, pbBuffer, dwFileSize, &dwBytesRead, NULL); - assert(dwBytesRead == dwFileSize); - STORM_FREE(pbBuffer); - } - } - SFileCloseFile(hFile); - } - SFileCloseArchive(hMpq); - } -*/ #ifdef TEST_COMMAND_LINE // Test-open MPQs from the command line. They must be plain name // and must be placed in the Test-MPQs folder @@ -4301,6 +4357,22 @@ int _tmain(int argc, TCHAR * argv[]) } #endif +#ifdef TEST_REPLACE_FILE // Replace a file in archives + if(dwErrCode == ERROR_SUCCESS) + { + for(size_t i = 0; i < _countof(Test_ReplaceFile); i++) + { + // Ignore the error code here; we want to see results of all opens + dwErrCode = TestReplaceFile(Test_ReplaceFile[i].szName1, + Test_ReplaceFile[i].szName2, + Test_ReplaceFile[i].szDataHash, + Test_ReplaceFile[i].dwFlags); + if(dwErrCode != ERROR_SUCCESS) + break; + } + } +#endif + // Verify SHA1 of each MPQ that we have in the list if(dwErrCode == ERROR_SUCCESS) dwErrCode = VerifyFileHashes(szMpqSubDir); @@ -4355,15 +4427,15 @@ int _tmain(int argc, TCHAR * argv[]) // Create a MPQ file, add a mono-WAVE file with various compressions if(dwErrCode == ERROR_SUCCESS) - dwErrCode = TestCreateArchive_WaveCompressionsTest(_T("StormLibTest_AddWaveMonoTest.mpq"), _T("AddFile-Mono.wav")); + dwErrCode = TestCreateArchive_WaveCompressionsTest(_T("StormLibTest_AddWaveMonoTest.mpq"), _T("Mono.wav")); // Create a MPQ file, add a mono-WAVE with 8 bits per sample file with various compressions if(dwErrCode == ERROR_SUCCESS) - dwErrCode = TestCreateArchive_WaveCompressionsTest(_T("StormLibTest_AddWaveMonoBadTest.mpq"), _T("AddFile-MonoBad.wav")); + dwErrCode = TestCreateArchive_WaveCompressionsTest(_T("StormLibTest_AddWaveMonoBadTest.mpq"), _T("MonoBad.wav")); // Create a MPQ file, add a stereo-WAVE file with various compressions if(dwErrCode == ERROR_SUCCESS) - dwErrCode = TestCreateArchive_WaveCompressionsTest(_T("StormLibTest_AddWaveStereoTest.mpq"), _T("AddFile-Stereo.wav")); + dwErrCode = TestCreateArchive_WaveCompressionsTest(_T("StormLibTest_AddWaveStereoTest.mpq"), _T("Stereo.wav")); // Check if the listfile is always created at the end of the file table in the archive if(dwErrCode == ERROR_SUCCESS) @@ -4373,13 +4445,6 @@ int _tmain(int argc, TCHAR * argv[]) if(dwErrCode == ERROR_SUCCESS) dwErrCode = TestCreateArchive_BigArchive(_T("StormLibTest_BigArchive_v4.mpq")); - // Test replacing a file with zero size file - if(dwErrCode == ERROR_SUCCESS) - dwErrCode = TestModifyArchive_ReplaceFile(_T("MPQ_2014_v4_Base.StormReplay"), _T("AddFile-replay.message.events")); - - if(dwErrCode == ERROR_SUCCESS) - dwErrCode = TestModifyArchive_ReplaceFile(_T("MPQ_2022_v1_v4.329.w3x"), _T("AddFile-war3map.j")); - #ifdef _MSC_VER _CrtDumpMemoryLeaks(); #endif // _MSC_VER -- cgit v1.2.3 From 17dc824f43db01c351275b6fe40a7b987564e2c4 Mon Sep 17 00:00:00 2001 From: Ladislav Zezula Date: Thu, 8 Jun 2023 18:14:48 +0200 Subject: Finalizing tests --- test/StormTest.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/StormTest.cpp b/test/StormTest.cpp index 9cc0dcf..c19529a 100755 --- a/test/StormTest.cpp +++ b/test/StormTest.cpp @@ -932,7 +932,7 @@ static DWORD InitializeMpqDirectory(TCHAR * argv[], int argc) return Logger.PrintError(_T("Patches folder was not found in the MPQ directory")); // Verify if the work MPQ directory is writable - CreateFullPathName(szFullPath, _countof(szFullPath), NULL, _T("TestFile.bin")); + CreateFullPathName(szFullPath, _countof(szFullPath), szDataFileDir, _T("new-file.bin")); pStream = FileStream_CreateFile(szFullPath, 0); if(pStream == NULL) return Logger.PrintError(_T("MPQ subdirectory doesn't exist or is not writable")); @@ -4427,15 +4427,15 @@ int _tmain(int argc, TCHAR * argv[]) // Create a MPQ file, add a mono-WAVE file with various compressions if(dwErrCode == ERROR_SUCCESS) - dwErrCode = TestCreateArchive_WaveCompressionsTest(_T("StormLibTest_AddWaveMonoTest.mpq"), _T("Mono.wav")); + dwErrCode = TestCreateArchive_WaveCompressionsTest(_T("StormLibTest_AddWaveMonoTest.mpq"), _T("wave-mono.wav")); // Create a MPQ file, add a mono-WAVE with 8 bits per sample file with various compressions if(dwErrCode == ERROR_SUCCESS) - dwErrCode = TestCreateArchive_WaveCompressionsTest(_T("StormLibTest_AddWaveMonoBadTest.mpq"), _T("MonoBad.wav")); + dwErrCode = TestCreateArchive_WaveCompressionsTest(_T("StormLibTest_AddWaveMonoBadTest.mpq"), _T("wave-mono-bad.wav")); // Create a MPQ file, add a stereo-WAVE file with various compressions if(dwErrCode == ERROR_SUCCESS) - dwErrCode = TestCreateArchive_WaveCompressionsTest(_T("StormLibTest_AddWaveStereoTest.mpq"), _T("Stereo.wav")); + dwErrCode = TestCreateArchive_WaveCompressionsTest(_T("StormLibTest_AddWaveStereoTest.mpq"), _T("wave-stereo.wav")); // Check if the listfile is always created at the end of the file table in the archive if(dwErrCode == ERROR_SUCCESS) -- cgit v1.2.3 From 06bf40330a8facdb2378a8cd4cf2af8c22bb4b0b Mon Sep 17 00:00:00 2001 From: Ladislav Zezula Date: Thu, 8 Jun 2023 20:00:09 +0200 Subject: Tests complete --- test/StormTest.cpp | 2 +- test/stormlib-test-001-linux.txt | 256 ++++++++++++++++++++------------------- test/stormlib-test-001.txt | 8 +- 3 files changed, 135 insertions(+), 131 deletions(-) diff --git a/test/StormTest.cpp b/test/StormTest.cpp index c19529a..76c4bfd 100755 --- a/test/StormTest.cpp +++ b/test/StormTest.cpp @@ -932,7 +932,7 @@ static DWORD InitializeMpqDirectory(TCHAR * argv[], int argc) return Logger.PrintError(_T("Patches folder was not found in the MPQ directory")); // Verify if the work MPQ directory is writable - CreateFullPathName(szFullPath, _countof(szFullPath), szDataFileDir, _T("new-file.bin")); + CreateFullPathName(szFullPath, _countof(szFullPath), szMpqSubDir, _T("new-file.bin")); pStream = FileStream_CreateFile(szFullPath, 0); if(pStream == NULL) return Logger.PrintError(_T("MPQ subdirectory doesn't exist or is not writable")); diff --git a/test/stormlib-test-001-linux.txt b/test/stormlib-test-001-linux.txt index 3c193ca..97ffef9 100644 --- a/test/stormlib-test-001-linux.txt +++ b/test/stormlib-test-001-linux.txt @@ -1,136 +1,138 @@ -==== Test Suite for StormLib version 9.24 ==== +==== 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) +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 (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_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_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. -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 +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 (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. -TestModifyMpq (MPQ_2014_v4_Base.StormReplay) succeeded. -TestModifyMpq (MPQ_2022_v1_v4.329.w3x) succeeded. \ No newline at end of file +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 b8ceeac..06c218d 100644 --- a/test/stormlib-test-001.txt +++ b/test/stormlib-test-001.txt @@ -1,4 +1,4 @@ -==== Test Suite for StormLib version 9.24 ==== +==== 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. @@ -42,6 +42,7 @@ 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. @@ -112,6 +113,9 @@ 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. @@ -132,5 +136,3 @@ 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. -TestModifyMpq (MPQ_2014_v4_Base.StormReplay) succeeded. -TestModifyMpq (MPQ_2022_v1_v4.329.w3x) succeeded. -- cgit v1.2.3