[Project64] Make sure Recompiler_Log_Message can not buffer overflow

This commit is contained in:
zilmar 2018-01-21 09:10:45 +11:00
parent f036c7825c
commit 2c802bd638
1 changed files with 11 additions and 4 deletions

View File

@ -23,12 +23,19 @@ void Recompiler_Log_Message(const char * strFormat, ...)
{ {
va_list args; va_list args;
va_start(args, strFormat); va_start(args, strFormat);
size_t nlen = _vscprintf(strFormat, args) + 3; size_t nlen = _vscprintf(strFormat, args);
char * buffer = (char *)alloca(nlen * sizeof(char)); char * buffer = (char *)alloca((nlen + 3) * sizeof(char));
if (buffer != NULL) if (buffer != NULL)
{ {
buffer[nlen - 1] = 0; if (nlen > 0)
vsprintf(buffer, strFormat, args); {
vsnprintf(buffer, nlen, strFormat, args);
buffer[nlen - 1] = '\0';
}
else
{
buffer[0] = '\0';
}
strcat(buffer, "\r\n"); strcat(buffer, "\r\n");
g_CPULogFile->Log(buffer); g_CPULogFile->Log(buffer);
} }