diff options
author | Ladislav Zezula <ladislav.zezula@avast.com> | 2023-02-06 18:30:15 +0100 |
---|---|---|
committer | Ladislav Zezula <ladislav.zezula@avast.com> | 2023-02-06 18:30:15 +0100 |
commit | 0d31856af86ac47801ade118ea93092eab62a101 (patch) | |
tree | d51fdfad9d4f394d17a4b4df9ca9c0137e11b9c5 /src | |
parent | 9beaed54cd6ef17ba3e0209233a29bd74184de6f (diff) |
Fixed bug in the LZMA compression
Diffstat (limited to 'src')
-rw-r--r-- | src/SCompression.cpp | 2 | ||||
-rw-r--r-- | src/SFileAddFile.cpp | 10 | ||||
-rw-r--r-- | src/StormLib.h | 1 |
3 files changed, 11 insertions, 2 deletions
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 | \ |