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/SCompression.cpp | 2 +- src/SFileAddFile.cpp | 10 +++++++++- src/StormLib.h | 1 + 3 files changed, 11 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/SCompression.cpp b/src/SCompression.cpp index 54c84b4..659c9a8 100644 --- a/src/SCompression.cpp +++ b/src/SCompression.cpp @@ -461,7 +461,7 @@ static void Compress_LZMA(void * pvOutBuffer, int * pcbOutBuffer, void * pvInBuf *pbOutBuffer++ = 0; // Copy the encoded properties to the output buffer - memcpy(pvOutBuffer, encodedProps, encodedPropsSize); + memcpy(pbOutBuffer, encodedProps, encodedPropsSize); pbOutBuffer += encodedPropsSize; // Copy the size of the data 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) { diff --git a/src/StormLib.h b/src/StormLib.h index e45f99d..dad9fc8 100644 --- a/src/StormLib.h +++ b/src/StormLib.h @@ -247,6 +247,7 @@ extern "C" { MPQ_FILE_COMPRESS | \ MPQ_FILE_ENCRYPTED | \ MPQ_FILE_FIX_KEY | \ + MPQ_FILE_SINGLE_UNIT | \ MPQ_FILE_DELETE_MARKER | \ MPQ_FILE_SECTOR_CRC | \ MPQ_FILE_SIGNATURE | \ -- cgit v1.2.3