From 0d31856af86ac47801ade118ea93092eab62a101 Mon Sep 17 00:00:00 2001 From: Ladislav Zezula Date: Mon, 6 Feb 2023 18:30:15 +0100 Subject: Fixed bug in the LZMA compression --- src/SFileAddFile.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'src/SFileAddFile.cpp') diff --git a/src/SFileAddFile.cpp b/src/SFileAddFile.cpp index b1288f1..5913424 100644 --- a/src/SFileAddFile.cpp +++ b/src/SFileAddFile.cpp @@ -896,6 +896,7 @@ bool WINAPI SFileAddFileEx( ULONGLONG FileSize = 0; ULONGLONG FileTime = 0; TFileStream * pStream = NULL; + TMPQArchive * ha; HANDLE hMpqFile = NULL; LPBYTE pbFileData = NULL; DWORD dwBytesRemaining = 0; @@ -907,7 +908,7 @@ bool WINAPI SFileAddFileEx( DWORD dwErrCode = ERROR_SUCCESS; // Check parameters - if(hMpq == NULL || szFileName == NULL || *szFileName == 0) + if(hMpq == NULL || szFileName == NULL || *szFileName == 0 || (ha = IsValidMpqHandle(hMpq)) == NULL) { SetLastError(ERROR_INVALID_PARAMETER); return false; @@ -933,6 +934,13 @@ bool WINAPI SFileAddFileEx( dwErrCode = ERROR_NOT_ENOUGH_MEMORY; } + // LZMA compression can only be present in MPQ version 2 or higher + if(dwErrCode == ERROR_SUCCESS) + { + if(dwCompression == MPQ_COMPRESSION_LZMA && ha->pHeader->wFormatVersion == MPQ_FORMAT_VERSION_1) + dwErrCode = ERROR_INVALID_PARAMETER; + } + // Deal with various combination of compressions if(dwErrCode == ERROR_SUCCESS) { -- cgit v1.2.3