-
June 29th, 2020, 04:48 PM
#1
Compression error
Hello,
I am trying to debug the legacy code. The code compresses the file (with different sections) during some operation. And later tries to decompress the same.
Now when new sections are added as part of another feature, the legacy code, throws exception for this code, as the SECTION_ERROR. It s due to some MAGIC number written for this section is not matching .
that is just background.
Now, I was trying to debug in release mode and found that, when t is writting the magic number:
Code:
size_t MemMappedCFileWriteLock::Write(const void * pBuffer, size_t nSize, size_t nCount)
{
size_t stWritten = 0;
size_t stTotal = nCount * nSize; // nSize should be 1 unless someone changes AIPerist
size_t stRemain = stTotal;
while ( stWritten < stTotal)
{
DWORD dwWriteCount = 0;
DWORD dwWritten;
if (stRemain > ULONG_MAX)
{
dwWriteCount = ULONG_MAX;
}
else
{
dwWriteCount = (DWORD)stRemain; // <= ULONG_MAX
}
bool bRet = (WriteFile(m_hFile, (char*)pBuffer + stWritten, dwWriteCount, &dwWritten, NULL) != 0);
if (!bRet)
break;
stWritten += (size_t)dwWriteCount;
stRemain -= (size_t)dwWriteCount;
}
return stWritten;
}
+++++++++++++++++++++++++++++++
WriteFile(
_In_ HANDLE hFile,
_In_reads_bytes_opt_(nNumberOfBytesToWrite) LPCVOID lpBuffer,
_In_ DWORD nNumberOfBytesToWrite,
_Out_opt_ LPDWORD lpNumberOfBytesWritten,
_Inout_opt_ LPOVERLAPPED lpOverlapped
);
The debugger showed the value of nsize and nCount as 1, 4.
But the dwWriteCount = (DWORD)stRemain; , sends the no of bytes as 1 to the WriteFile function.
Does this casting look suspicious ? SShould it not send, 4 bytes to WriteFile function !
Thanks a lot
pdk
Tags for this Thread
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|