aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLadislav Zezula <zezula-at-volny-dot-cz>2017-07-26 20:34:02 +0200
committerLadislav Zezula <zezula-at-volny-dot-cz>2017-07-26 20:34:02 +0200
commitf813753a661731f970f0522597c228738bf8d075 (patch)
tree1b6199ad870240473b3f32fd5ce9fc3d8e768d28 /src
parent6fc99332b52dbd46341a6e02fe5c3ee4cf0e7b59 (diff)
Added support for PG1.11.973 protector
Diffstat (limited to 'src')
-rw-r--r--src/SBaseFileTable.cpp5
-rw-r--r--src/SFileGetFileInfo.cpp2
-rw-r--r--src/SFileOpenArchive.cpp4
-rw-r--r--src/StormCommon.h2
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);