diff options
author | Ladislav Zezula <zezula@volny.cz> | 2023-10-06 06:38:05 +0200 |
---|---|---|
committer | Ladislav Zezula <zezula@volny.cz> | 2023-10-06 06:38:05 +0200 |
commit | 0d89b2b473dc618c5f5f5fb051121e34cdedad00 (patch) | |
tree | 1bfd88dd8719250ee7ffaa232747e6d5ab27ab08 /src | |
parent | c9ac60d64bf00bfd7a511dd2112a152942eb67a5 (diff) |
Fixed bug in SFileSetFileLocale
Diffstat (limited to 'src')
-rw-r--r-- | src/SBaseCommon.cpp | 4 | ||||
-rw-r--r-- | src/SFileAddFile.cpp | 4 | ||||
-rw-r--r-- | src/SFileCompactArchive.cpp | 2 | ||||
-rw-r--r-- | src/SFileGetFileInfo.cpp | 2 | ||||
-rw-r--r-- | src/StormLib.h | 12 |
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 |