From 2c802bd638772e2dff58541da97058c2c8c32e6d Mon Sep 17 00:00:00 2001 From: zilmar Date: Sun, 21 Jan 2018 09:10:45 +1100 Subject: [PATCH] [Project64] Make sure Recompiler_Log_Message can not buffer overflow --- .../N64System/Recompiler/RecompilerCodeLog.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/Source/Project64-core/N64System/Recompiler/RecompilerCodeLog.cpp b/Source/Project64-core/N64System/Recompiler/RecompilerCodeLog.cpp index d9becae37..be46f7c9f 100644 --- a/Source/Project64-core/N64System/Recompiler/RecompilerCodeLog.cpp +++ b/Source/Project64-core/N64System/Recompiler/RecompilerCodeLog.cpp @@ -23,12 +23,19 @@ void Recompiler_Log_Message(const char * strFormat, ...) { va_list args; va_start(args, strFormat); - size_t nlen = _vscprintf(strFormat, args) + 3; - char * buffer = (char *)alloca(nlen * sizeof(char)); + size_t nlen = _vscprintf(strFormat, args); + char * buffer = (char *)alloca((nlen + 3) * sizeof(char)); if (buffer != NULL) { - buffer[nlen - 1] = 0; - vsprintf(buffer, strFormat, args); + if (nlen > 0) + { + vsnprintf(buffer, nlen, strFormat, args); + buffer[nlen - 1] = '\0'; + } + else + { + buffer[0] = '\0'; + } strcat(buffer, "\r\n"); g_CPULogFile->Log(buffer); }