From 47b6b6eb4addd82a89d6bcd8fa92f9c0a09a5781 Mon Sep 17 00:00:00 2001 From: Ladislav Zezula Date: Fri, 27 May 2016 16:50:50 +0200 Subject: + Support for MPQs that have invalid (and ignored) flags in the block table + Support for MPQs that have malformed block indexes (0x8000xxxx or 0x4000xxxx) --- src/SFileOpenArchive.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/SFileOpenArchive.cpp') diff --git a/src/SFileOpenArchive.cpp b/src/SFileOpenArchive.cpp index 6a249f2..2cb6698 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->dwHashTableSize &= 0x0FFFFFFF; - ha->pHeader->dwBlockTableSize &= 0x0FFFFFFF; + ha->pHeader->dwBlockTableSize = MPQ_BLOCK_INDEX(ha->pHeader->dwBlockTableSize); + ha->pHeader->dwHashTableSize = MPQ_BLOCK_INDEX(ha->pHeader->dwHashTableSize); // Both MPQ_OPEN_NO_LISTFILE or MPQ_OPEN_NO_ATTRIBUTES trigger read only mode if(dwFlags & (MPQ_OPEN_NO_LISTFILE | MPQ_OPEN_NO_ATTRIBUTES)) -- cgit v1.2.3