UINT flags)
{
LPWSTR lpFullMsg = NULL;
- DWORD msgLen;
+ SIZE_T msgLen;
msgLen = wcslen(lpMsg) + 1;
if (flags & LOG_ERROR)
{
- LPVOID lpSysMsg;
+ LPWSTR lpSysMsg;
DWORD eMsgLen;
eMsgLen = FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
errNum,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
- (LPTSTR)&lpSysMsg,
+ (LPWSTR)&lpSysMsg,
0,
NULL);
}
}
+ /* Make sure the length in bytes doesn't overflow a DWORD */
+ msgLen = wcslen(lpFullMsg);
+ if (msgLen > (MAXDWORD / sizeof(WCHAR)))
+ {
+ RaiseException(EXCEPTION_INT_OVERFLOW, 0, 0, NULL);
+ }
+
if (lpFullMsg)
{
DWORD bytesWritten;
bRet = WriteFile(hLogFile,
lpFullMsg,
- wcslen(lpFullMsg) * sizeof(WCHAR),
+ (DWORD)msgLen * sizeof(WCHAR),
&bytesWritten,
&olWrite);
if (!bRet)