diff options
author | Ladislav Zezula <zezula-at-volny-dot-cz> | 2016-06-18 20:32:15 +0200 |
---|---|---|
committer | Ladislav Zezula <zezula-at-volny-dot-cz> | 2016-06-18 20:32:15 +0200 |
commit | 303631f9d7f753dacffb1e038dd273dc204e1ea9 (patch) | |
tree | 5397acd7c5b8efe6e1a721f0177b534e38d9acd6 /src/SFileOpenArchive.cpp | |
parent | 47b6b6eb4addd82a89d6bcd8fa92f9c0a09a5781 (diff) |
+ Updated for protectors fiddling with too big block table index
Diffstat (limited to 'src/SFileOpenArchive.cpp')
-rw-r--r-- | src/SFileOpenArchive.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/SFileOpenArchive.cpp b/src/SFileOpenArchive.cpp index 2cb6698..62effe7 100644 --- a/src/SFileOpenArchive.cpp +++ b/src/SFileOpenArchive.cpp @@ -369,8 +369,8 @@ bool WINAPI SFileOpenArchive( // higher than 0x10000000, it would overflow in 32-bit version // Observed in the malformed Warcraft III maps // Example map: MPQ_2016_v1_ProtectedMap_TableSizeOverflow.w3x - ha->pHeader->dwBlockTableSize = MPQ_BLOCK_INDEX(ha->pHeader->dwBlockTableSize); - ha->pHeader->dwHashTableSize = MPQ_BLOCK_INDEX(ha->pHeader->dwHashTableSize); + ha->pHeader->dwBlockTableSize = (ha->pHeader->dwBlockTableSize & BLOCK_INDEX_MASK); + ha->pHeader->dwHashTableSize = (ha->pHeader->dwHashTableSize & BLOCK_INDEX_MASK); // Both MPQ_OPEN_NO_LISTFILE or MPQ_OPEN_NO_ATTRIBUTES trigger read only mode if(dwFlags & (MPQ_OPEN_NO_LISTFILE | MPQ_OPEN_NO_ATTRIBUTES)) |