diff options
-rw-r--r-- | src/SMemUtf8.cpp | 4 | ||||
-rwxr-xr-x | test/StormTest.cpp | 7 | ||||
-rw-r--r-- | test/stormlib-test-001.txt | 2 |
3 files changed, 9 insertions, 4 deletions
diff --git a/src/SMemUtf8.cpp b/src/SMemUtf8.cpp index 7f03e77..abc16ee 100644 --- a/src/SMemUtf8.cpp +++ b/src/SMemUtf8.cpp @@ -40,6 +40,8 @@ const unsigned char SMemCharToByte[0x80] = 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF // 0x70 }; +static TCHAR szInvalidCharPrefix[] = _T("%u["); + //----------------------------------------------------------------------------- // Local functions @@ -217,7 +219,7 @@ static size_t UTF8_FlushInvalidChars(LPTSTR szBuffer, size_t ccBuffer, size_t nO // Space for 4 characters needed if(szBuffer != NULL && (nOutLength + nLengthNeeded) <= ccBuffer) { - memcpy(szBuffer + nOutLength, _T("%u["), 6); + memcpy(szBuffer + nOutLength, szInvalidCharPrefix, sizeof(szInvalidCharPrefix) - sizeof(TCHAR)); SMemBinToStr(szBuffer + nOutLength + 3, ccBuffer - 3, InvalidChars, nInvalidChars); diff --git a/test/StormTest.cpp b/test/StormTest.cpp index dba91f3..c5b5121 100755 --- a/test/StormTest.cpp +++ b/test/StormTest.cpp @@ -1436,9 +1436,12 @@ static DWORD LoadMpqFile(TLogHelper & Logger, HANDLE hMpq, LPCSTR szFileName, LC DWORD dwBytesRead;
DWORD dwCrc32 = 0;
DWORD dwErrCode = ERROR_SUCCESS;
+ TCHAR szSafeName[1024];
- // Do nothing if the file name is invalid
- Logger.PrintProgress("Loading file %s ...", GetShortPlainName(szFileName));
+ // Print the file name to the console.
+ // Prevent bad UTF-8 sequences to go through
+ SMemUTF8ToFileName(szSafeName, _countof(szSafeName), szFileName, NULL, 0, NULL);
+ Logger.PrintProgress(_T("Loading file %s ..."), GetShortPlainName(szSafeName));
#if defined(_MSC_VER) && defined(_DEBUG)
//if(!_stricmp(szFileName, "(signature)"))
diff --git a/test/stormlib-test-001.txt b/test/stormlib-test-001.txt index c386367..062652f 100644 --- a/test/stormlib-test-001.txt +++ b/test/stormlib-test-001.txt @@ -68,7 +68,7 @@ TestReadingMpq (MPQ_2023_v4_UTF8.s2ma) succeeded. TestReadingMpq (MPQ_2023_v1_GreenTD.w3x) succeeded. TestReadingMpq (MPQ_2023_v4_1F644C5A.SC2Replay) succeeded. TestReadingMpq (<Chinese MPQ name>) succeeded. -TestReadingMpq (MPQ_2024_v1_BadUtf8_5.0.2.w3x) succeeded. ... .. +TestReadingMpq (MPQ_2024_v1_BadUtf8_5.0.2.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. |