mirror of
https://github.com/ladislav-zezula/StormLib.git
synced 2026-01-30 19:16:29 +01:00
Merge pull request #296 from ladislav-zezula/LZ_ReplaceFileTest
Fixed handling of the stream end in Huffmann decompression
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,13 +924,15 @@ 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)
|
||||
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), 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"));
|
||||
@@ -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("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("AddFile-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("AddFile-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)
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
ListFilePos (StormLibTest_ListFilePos.mpq) succeeded.
|
||||
TestBigArchive (StormLibTest_BigArchive_v4.mpq) succeeded.
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user