aboutsummaryrefslogtreecommitdiff
path: root/src/SFileAddFile.cpp
diff options
context:
space:
mode:
authorLadislav Zezula <ladislav.zezula@avast.com>2021-12-26 11:36:55 +0100
committerLadislav Zezula <ladislav.zezula@avast.com>2021-12-26 11:36:55 +0100
commita5ef7a850aac844abf2e3859e26617ed596d4624 (patch)
tree92c30943d8df469bc2ee372c1c022c6dfa9fb95e /src/SFileAddFile.cpp
parentfb9b3d4ba173d3ff4c70b0e404f6b4ebee864ce9 (diff)
Fixed assert on some platforms
Diffstat (limited to 'src/SFileAddFile.cpp')
-rw-r--r--src/SFileAddFile.cpp21
1 files changed, 11 insertions, 10 deletions
diff --git a/src/SFileAddFile.cpp b/src/SFileAddFile.cpp
index 9c7331b..f71434e 100644
--- a/src/SFileAddFile.cpp
+++ b/src/SFileAddFile.cpp
@@ -80,7 +80,7 @@ static bool IsWaveFile_16BitsPerAdpcmSample(
return false;
}
-static int FillWritableHandle(
+static DWORD FillWritableHandle(
TMPQArchive * ha,
TMPQFile * hf,
ULONGLONG FileTime,
@@ -99,14 +99,13 @@ static int FillWritableHandle(
pFileEntry->dwCmpSize = 0;
pFileEntry->dwFlags = dwFlags | MPQ_FILE_EXISTS;
- // Initialize the file time, CRC32 and MD5
- assert(sizeof(hf->hctx) >= sizeof(hash_state));
- memset(pFileEntry->md5, 0, MD5_DIGEST_SIZE);
- md5_init((hash_state *)hf->hctx);
- pFileEntry->dwCrc32 = crc32(0, Z_NULL, 0);
+ // Initialize hashing of the file
+ if((hf->hctx = STORM_ALLOC(hash_state, 1)) != NULL)
+ md5_init((hash_state *)hf->hctx);
- // If the caller gave us a file time, use it.
+ // Fill-in file time and CRC
pFileEntry->FileTime = FileTime;
+ pFileEntry->dwCrc32 = crc32(0, Z_NULL, 0);
// Mark the archive as modified
ha->dwFlags |= MPQ_FLAG_CHANGED;
@@ -175,8 +174,9 @@ static DWORD WriteDataToMpqFile(
// Set the position in the file
ByteOffset = hf->RawFilePos + pFileEntry->dwCmpSize;
- // Update CRC32 and MD5 of the file
- md5_process((hash_state *)hf->hctx, hf->pbFileSector, dwBytesInSector);
+ // Update MD5 and CRC32 of the file
+ if(hf->hctx != NULL)
+ md5_process((hash_state *)hf->hctx, hf->pbFileSector, dwBytesInSector);
hf->dwCrc32 = crc32(hf->dwCrc32, hf->pbFileSector, dwBytesInSector);
// Compress the file sector, if needed
@@ -662,7 +662,8 @@ DWORD SFileAddFile_Write(TMPQFile * hf, const void * pvData, DWORD dwSize, DWORD
pFileEntry->dwCrc32 = hf->dwCrc32;
// Finish calculating MD5
- md5_done((hash_state *)hf->hctx, pFileEntry->md5);
+ if(hf->hctx != NULL)
+ md5_done((hash_state *)hf->hctx, pFileEntry->md5);
// If we also have sector checksums, write them to the file
if(hf->SectorChksums != NULL)