aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLadislav Zezula <zezula@volny.cz>2023-10-06 06:38:05 +0200
committerLadislav Zezula <zezula@volny.cz>2023-10-06 06:38:05 +0200
commit0d89b2b473dc618c5f5f5fb051121e34cdedad00 (patch)
tree1bfd88dd8719250ee7ffaa232747e6d5ab27ab08 /src
parentc9ac60d64bf00bfd7a511dd2112a152942eb67a5 (diff)
Fixed bug in SFileSetFileLocale
Diffstat (limited to 'src')
-rw-r--r--src/SBaseCommon.cpp4
-rw-r--r--src/SFileAddFile.cpp4
-rw-r--r--src/SFileCompactArchive.cpp2
-rw-r--r--src/SFileGetFileInfo.cpp2
-rw-r--r--src/StormLib.h12
5 files changed, 13 insertions, 11 deletions
diff --git a/src/SBaseCommon.cpp b/src/SBaseCommon.cpp
index cb78bb5..de6c58f 100644
--- a/src/SBaseCommon.cpp
+++ b/src/SBaseCommon.cpp
@@ -403,7 +403,7 @@ DWORD GetDefaultSpecialFileFlags(DWORD dwFileSize, USHORT wFormatVersion)
{
// Fixed for format 1.0
if(wFormatVersion == MPQ_FORMAT_VERSION_1)
- return MPQ_FILE_COMPRESS | MPQ_FILE_ENCRYPTED | MPQ_FILE_FIX_KEY;
+ return MPQ_FILE_COMPRESS | MPQ_FILE_ENCRYPTED | MPQ_FILE_KEY_V2;
// Size-dependent for formats 2.0-4.0
return (dwFileSize > 0x4000) ? (MPQ_FILE_COMPRESS | MPQ_FILE_SECTOR_CRC) : (MPQ_FILE_COMPRESS | MPQ_FILE_SINGLE_UNIT);
@@ -696,7 +696,7 @@ DWORD DecryptFileKey(
dwFileKey = HashString(szFileName, MPQ_HASH_FILE_KEY);
// Fix the key, if needed
- if(dwFlags & MPQ_FILE_FIX_KEY)
+ if(dwFlags & MPQ_FILE_KEY_V2)
dwFileKey = (dwFileKey + dwMpqPos) ^ dwFileSize;
// Return the key
diff --git a/src/SFileAddFile.cpp b/src/SFileAddFile.cpp
index 2d14dda..1baf1fa 100644
--- a/src/SFileAddFile.cpp
+++ b/src/SFileAddFile.cpp
@@ -433,7 +433,7 @@ DWORD SFileAddFile_Init(
// Fix Key is not allowed if the file is not encrypted
if(!(dwFlags & MPQ_FILE_ENCRYPTED))
- dwFlags &= ~MPQ_FILE_FIX_KEY;
+ dwFlags &= ~MPQ_FILE_KEY_V2;
// If the MPQ is of version 3.0 or higher, we ignore file locale.
// This is because HET and BET tables have no known support for it
@@ -1303,7 +1303,7 @@ bool WINAPI SFileSetFileLocale(HANDLE hFile, LCID lcNewLocale)
}
// We have to check if the file+locale is not already there
- pFileEntry = GetFileEntryLocale(ha, hf->pFileEntry->szFileName, lcNewLocale, NULL);
+ pFileEntry = GetFileEntryExact(ha, hf->pFileEntry->szFileName, lcNewLocale, NULL);
if(pFileEntry != NULL)
{
SetLastError(ERROR_ALREADY_EXISTS);
diff --git a/src/SFileCompactArchive.cpp b/src/SFileCompactArchive.cpp
index d4525b6..1077daa 100644
--- a/src/SFileCompactArchive.cpp
+++ b/src/SFileCompactArchive.cpp
@@ -163,7 +163,7 @@ static DWORD CopyMpqFileSectors(
if(dwErrCode == ERROR_SUCCESS && (pFileEntry->dwFlags & MPQ_FILE_ENCRYPTED))
{
dwFileKey2 = dwFileKey1 = hf->dwFileKey;
- if(pFileEntry->dwFlags & MPQ_FILE_FIX_KEY)
+ if(pFileEntry->dwFlags & MPQ_FILE_KEY_V2)
{
dwFileKey2 = (dwFileKey1 ^ pFileEntry->dwFileSize) - (DWORD)pFileEntry->ByteOffset;
dwFileKey2 = (dwFileKey2 + (DWORD)MpqFilePos) ^ pFileEntry->dwFileSize;
diff --git a/src/SFileGetFileInfo.cpp b/src/SFileGetFileInfo.cpp
index 2a4d7b3..7a8afe0 100644
--- a/src/SFileGetFileInfo.cpp
+++ b/src/SFileGetFileInfo.cpp
@@ -437,7 +437,7 @@ bool WINAPI SFileGetFileInfo(
case SFileInfoEncryptionKeyRaw:
dwInt32Value = hf->dwFileKey;
- if(pFileEntry->dwFlags & MPQ_FILE_FIX_KEY)
+ if(pFileEntry->dwFlags & MPQ_FILE_KEY_V2)
dwInt32Value = (dwInt32Value ^ pFileEntry->dwFileSize) - (DWORD)hf->MpqFilePos;
return GetInfo(pvFileInfo, cbFileInfo, &dwInt32Value, sizeof(DWORD), pcbLengthNeeded);
diff --git a/src/StormLib.h b/src/StormLib.h
index 4d5992d..901f943 100644
--- a/src/StormLib.h
+++ b/src/StormLib.h
@@ -218,8 +218,8 @@ extern "C" {
// Flags for TMPQBlock::dwFlags
#define MPQ_FILE_IMPLODE 0x00000100 // Implode method (By PKWARE Data Compression Library)
#define MPQ_FILE_COMPRESS 0x00000200 // Compress methods (By multiple methods)
-#define MPQ_FILE_ENCRYPTED 0x00010000 // Indicates whether file is encrypted
-#define MPQ_FILE_FIX_KEY 0x00020000 // File decryption key has to be fixed
+#define MPQ_FILE_ENCRYPTED 0x00010000 // Indicates an encrypted file
+#define MPQ_FILE_KEY_V2 0x00020000 // Indicates an encrypted file with key v2
#define MPQ_FILE_PATCH_FILE 0x00100000 // The file is a patch file. Raw file data begin with TPatchInfo structure
#define MPQ_FILE_SINGLE_UNIT 0x01000000 // File is stored as a single unit, rather than split into sectors (Thx, Quantam)
#define MPQ_FILE_DELETE_MARKER 0x02000000 // File is a deletion marker. Used in MPQ patches, indicating that the file no longer exists.
@@ -233,10 +233,12 @@ extern "C" {
#define MPQ_FILE_DEFAULT_INTERNAL 0xFFFFFFFF // Use default flags for internal files
+#define MPQ_FILE_FIX_KEY 0x00020000 // Obsolete, do not use
+
#define MPQ_FILE_VALID_FLAGS (MPQ_FILE_IMPLODE | \
MPQ_FILE_COMPRESS | \
MPQ_FILE_ENCRYPTED | \
- MPQ_FILE_FIX_KEY | \
+ MPQ_FILE_KEY_V2 | \
MPQ_FILE_PATCH_FILE | \
MPQ_FILE_SINGLE_UNIT | \
MPQ_FILE_DELETE_MARKER | \
@@ -247,7 +249,7 @@ extern "C" {
#define MPQ_FILE_VALID_FLAGS_W3X (MPQ_FILE_IMPLODE | \
MPQ_FILE_COMPRESS | \
MPQ_FILE_ENCRYPTED | \
- MPQ_FILE_FIX_KEY | \
+ MPQ_FILE_KEY_V2 | \
MPQ_FILE_DELETE_MARKER | \
MPQ_FILE_SECTOR_CRC | \
MPQ_FILE_SIGNATURE | \
@@ -256,7 +258,7 @@ extern "C" {
#define MPQ_FILE_VALID_FLAGS_SCX (MPQ_FILE_IMPLODE | \
MPQ_FILE_COMPRESS | \
MPQ_FILE_ENCRYPTED | \
- MPQ_FILE_FIX_KEY | \
+ MPQ_FILE_KEY_V2 | \
MPQ_FILE_EXISTS)
// Flags for TPatchInfo::dwFlags