diff options
author | Ladislav Zezula <zezula-at-volny-dot-cz> | 2017-07-26 20:34:02 +0200 |
---|---|---|
committer | Ladislav Zezula <zezula-at-volny-dot-cz> | 2017-07-26 20:34:02 +0200 |
commit | f813753a661731f970f0522597c228738bf8d075 (patch) | |
tree | 1b6199ad870240473b3f32fd5ce9fc3d8e768d28 /src | |
parent | 6fc99332b52dbd46341a6e02fe5c3ee4cf0e7b59 (diff) |
Added support for PG1.11.973 protector
Diffstat (limited to 'src')
-rw-r--r-- | src/SBaseFileTable.cpp | 5 | ||||
-rw-r--r-- | src/SFileGetFileInfo.cpp | 2 | ||||
-rw-r--r-- | src/SFileOpenArchive.cpp | 4 | ||||
-rw-r--r-- | src/StormCommon.h | 2 |
4 files changed, 7 insertions, 6 deletions
diff --git a/src/SBaseFileTable.cpp b/src/SBaseFileTable.cpp index 50bf69e..d9664a5 100644 --- a/src/SBaseFileTable.cpp +++ b/src/SBaseFileTable.cpp @@ -338,7 +338,8 @@ int ConvertMpqHeaderToFormat4( TMPQArchive * ha,
ULONGLONG MpqOffset,
ULONGLONG FileSize,
- DWORD dwFlags)
+ DWORD dwFlags,
+ bool bIsWarcraft3Map)
{
TMPQHeader * pHeader = (TMPQHeader *)ha->HeaderData;
ULONGLONG BlockTablePos64 = 0;
@@ -350,7 +351,7 @@ int ConvertMpqHeaderToFormat4( // If version 1.0 is forced, then the format version is forced to be 1.0
// Reason: Storm.dll in Warcraft III ignores format version value
- if(dwFlags & MPQ_OPEN_FORCE_MPQ_V1)
+ if((dwFlags & MPQ_OPEN_FORCE_MPQ_V1) || (bIsWarcraft3Map))
wFormatVersion = MPQ_FORMAT_VERSION_1;
// Format-specific fixes
diff --git a/src/SFileGetFileInfo.cpp b/src/SFileGetFileInfo.cpp index 365dce5..4f15501 100644 --- a/src/SFileGetFileInfo.cpp +++ b/src/SFileGetFileInfo.cpp @@ -416,7 +416,7 @@ bool WINAPI SFileGetFileInfo( if(ha != NULL)
{
nInfoType = SFILE_INFO_TYPE_NOT_FOUND;
- if(MAKE_OFFSET64(ha->pHeader->wBlockTablePosHi, ha->pHeader->dwBlockTablePos) != 0)
+ if(MAKE_OFFSET64(ha->pHeader->wBlockTablePosHi, ha->pHeader->dwBlockTablePos) < ha->FileSize)
{
cbSrcFileInfo = ha->pHeader->dwBlockTableSize * sizeof(TMPQBlock);
if(cbFileInfo >= cbSrcFileInfo)
diff --git a/src/SFileOpenArchive.cpp b/src/SFileOpenArchive.cpp index 62effe7..a78b169 100644 --- a/src/SFileOpenArchive.cpp +++ b/src/SFileOpenArchive.cpp @@ -301,13 +301,13 @@ bool WINAPI SFileOpenArchive( if(dwHeaderID == ID_MPQ && dwHeaderSize >= MPQ_HEADER_SIZE_V1) { // Now convert the header to version 4 - nError = ConvertMpqHeaderToFormat4(ha, SearchOffset, FileSize, dwFlags); + nError = ConvertMpqHeaderToFormat4(ha, SearchOffset, FileSize, dwFlags, bIsWarcraft3Map); bSearchComplete = true; break; } // Check for MPK archives (Longwu Online - MPQ fork) - if(dwHeaderID == ID_MPK) + if(dwHeaderID == ID_MPK && bIsWarcraft3Map == false) { // Now convert the MPK header to MPQ Header version 4 nError = ConvertMpkHeaderToFormat4(ha, FileSize, dwFlags); diff --git a/src/StormCommon.h b/src/StormCommon.h index 27ba45f..868f1c1 100644 --- a/src/StormCommon.h +++ b/src/StormCommon.h @@ -185,7 +185,7 @@ TMPQFile * IsValidFileHandle(HANDLE hFile); ULONGLONG FileOffsetFromMpqOffset(TMPQArchive * ha, ULONGLONG MpqOffset);
ULONGLONG CalculateRawSectorOffset(TMPQFile * hf, DWORD dwSectorOffset);
-int ConvertMpqHeaderToFormat4(TMPQArchive * ha, ULONGLONG MpqOffset, ULONGLONG FileSize, DWORD dwFlags);
+int ConvertMpqHeaderToFormat4(TMPQArchive * ha, ULONGLONG MpqOffset, ULONGLONG FileSize, DWORD dwFlags, bool bIsWarcraft3Map);
bool IsValidHashEntry(TMPQArchive * ha, TMPQHash * pHash);
|