https://git.reactos.org/?p=reactos.git;a=commitdiff;h=161eb5d375fa6f5042625…
commit 161eb5d375fa6f50426258d02921815cc23b2b47
Author: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
AuthorDate: Mon Nov 13 22:37:36 2023 +0100
Commit: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
CommitDate: Tue Nov 14 12:24:00 2023 +0100
[CRT] dbgrpt.cpp: Fix buffer sizes in the *nprintf functions (#5678)
Sizes are in number of chars; use _countof() instead of hardcoding
them in the functions.
---
sdk/lib/crt/misc/dbgrpt.cpp | 41 ++++++++++++++++++++++++++++-------------
1 file changed, 28 insertions(+), 13 deletions(-)
diff --git a/sdk/lib/crt/misc/dbgrpt.cpp b/sdk/lib/crt/misc/dbgrpt.cpp
index 51c55af9b4c..a923f666d8a 100644
--- a/sdk/lib/crt/misc/dbgrpt.cpp
+++ b/sdk/lib/crt/misc/dbgrpt.cpp
@@ -133,7 +133,7 @@ HMODULE _CrtGetUser32()
}
}
- return _CrtUser32Handle != INVALID_HANDLE_VALUE ? _CrtUser32Handle : NULL;
+ return (_CrtUser32Handle != INVALID_HANDLE_VALUE ? _CrtUser32Handle : NULL);
}
static tMessageBoxW _CrtGetMessageBox()
@@ -149,7 +149,7 @@ static tMessageBoxW _CrtGetMessageBox()
_InterlockedCompareExchangePointer((PVOID*)&_CrtMessageBoxW, (PVOID)proc,
NULL);
}
- return _CrtMessageBoxW != INVALID_HANDLE_VALUE ? _CrtMessageBoxW : NULL;
+ return (_CrtMessageBoxW != INVALID_HANDLE_VALUE ? _CrtMessageBoxW : NULL);
}
@@ -158,7 +158,7 @@ static int _CrtDbgReportWindow(int reportType, const char_t *filename,
int linen
{
typedef dbgrpt_char_traits<char_t> traits;
- wchar_t szCompleteMessage[(DBGRPT_MAX_BUFFER_SIZE+1)*2] = {0};
+ wchar_t szCompleteMessage[DBGRPT_MAX_BUFFER_SIZE] = {0};
wchar_t LineBuffer[20] = {0};
if (filename && !filename[0])
@@ -170,7 +170,8 @@ static int _CrtDbgReportWindow(int reportType, const char_t *filename,
int linen
if (linenumber)
_itow(linenumber, LineBuffer, 10);
- _snwprintf(szCompleteMessage, DBGRPT_MAX_BUFFER_SIZE * 2,
+ _snwprintf(szCompleteMessage,
+ _countof(szCompleteMessage) - 1,
traits::szAssertionMessage,
_CrtModeMessages[reportType],
moduleName ? L"\nModule: " : L"", moduleName ?
moduleName : traits::szEmptyString,
@@ -185,7 +186,7 @@ static int _CrtDbgReportWindow(int reportType, const char_t *filename,
int linen
tMessageBoxW messageBox = _CrtGetMessageBox();
if (!messageBox)
- return IsDebuggerPresent() ? IDRETRY : IDABORT;
+ return (IsDebuggerPresent() ? IDRETRY : IDABORT);
// TODO: If we are not interacive, add MB_SERVICE_NOTIFICATION
return messageBox(NULL, szCompleteMessage, L"ReactOS C++ Runtime
Library",
@@ -318,8 +319,8 @@ _VCrtDbgReportA(
const char *format,
va_list arglist)
{
- char szFormatted[DBGRPT_MAX_BUFFER_SIZE+1] = {0}; // The user provided
message
- char szCompleteMessage[(DBGRPT_MAX_BUFFER_SIZE+1)*2] = {0}; // The output for debug /
file
+ char szFormatted[DBGRPT_MAX_BUFFER_SIZE] = {0}; // The user provided message
+ char szCompleteMessage[DBGRPT_MAX_BUFFER_SIZE] = {0}; // The output for debug /
file
// Check for recursive _CrtDbgReport calls, and validate reportType
if (!_CrtEnterDbgReport(reportType, filename, linenumber))
@@ -327,12 +328,19 @@ _VCrtDbgReportA(
if (filename)
{
- _snprintf(szCompleteMessage, DBGRPT_MAX_BUFFER_SIZE, "%s(%d) : ",
filename, linenumber);
+ _snprintf(szCompleteMessage,
+ _countof(szCompleteMessage) - 1,
+ "%s(%d) : ",
+ filename,
+ linenumber);
}
if (format)
{
- int len = _vsnprintf(szFormatted, DBGRPT_MAX_BUFFER_SIZE - 2 -
sizeof(DBGRPT_ASSERT_PREFIX_MESSAGE), format, arglist);
+ int len = _vsnprintf(szFormatted,
+ _countof(szFormatted) - 2 -
_countof(DBGRPT_ASSERT_PREFIX_MESSAGE),
+ format,
+ arglist);
if (len < 0)
{
strcpy(szFormatted, DBGRPT_STRING_TOO_LONG);
@@ -373,8 +381,8 @@ _VCrtDbgReportW(
const wchar_t *format,
va_list arglist)
{
- wchar_t szFormatted[DBGRPT_MAX_BUFFER_SIZE+1] = {0}; // The user provided
message
- wchar_t szCompleteMessage[(DBGRPT_MAX_BUFFER_SIZE+1)*2] = {0}; // The output for
debug / file
+ wchar_t szFormatted[DBGRPT_MAX_BUFFER_SIZE] = {0}; // The user provided
message
+ wchar_t szCompleteMessage[DBGRPT_MAX_BUFFER_SIZE] = {0}; // The output for debug /
file
// Check for recursive _CrtDbgReportW calls, and validate reportType
if (!_CrtEnterDbgReport(reportType, filename, linenumber))
@@ -382,12 +390,19 @@ _VCrtDbgReportW(
if (filename)
{
- _snwprintf(szCompleteMessage, DBGRPT_MAX_BUFFER_SIZE, L"%s(%d) : ",
filename, linenumber);
+ _snwprintf(szCompleteMessage,
+ _countof(szCompleteMessage) - 1,
+ L"%s(%d) : ",
+ filename,
+ linenumber);
}
if (format)
{
- int len = _vsnwprintf(szFormatted, DBGRPT_MAX_BUFFER_SIZE - 2 -
sizeof(DBGRPT_ASSERT_PREFIX_MESSAGE), format, arglist);
+ int len = _vsnwprintf(szFormatted,
+ _countof(szFormatted) - 2 -
_countof(DBGRPT_ASSERT_PREFIX_MESSAGE),
+ format,
+ arglist);
if (len < 0)
{
wcscpy(szFormatted, _CRT_WIDE(DBGRPT_STRING_TOO_LONG));