diff --git a/src/safeguards.h b/src/safeguards.h index e4c8949f11..993b44b06c 100644 --- a/src/safeguards.h +++ b/src/safeguards.h @@ -56,7 +56,7 @@ #define gets SAFEGUARD_DO_NOT_USE_THIS_METHOD /* No clear replacement. */ -//#define strtok SAFEGUARD_DO_NOT_USE_THIS_METHOD +#define strtok SAFEGUARD_DO_NOT_USE_THIS_METHOD /* * Possible future methods to mark unsafe, though needs more thought: diff --git a/src/video/dedicated_v.cpp b/src/video/dedicated_v.cpp index 1d8992bb79..bfe853e9a0 100644 --- a/src/video/dedicated_v.cpp +++ b/src/video/dedicated_v.cpp @@ -99,6 +99,9 @@ static void WINAPI CheckForConsoleInput() HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE); for (;;) { ReadFile(hStdin, _win_console_thread_buffer, lengthof(_win_console_thread_buffer), &nb, NULL); + if (nb >= lengthof(_win_console_thread_buffer)) nb = lengthof(_win_console_thread_buffer) - 1; + _win_console_thread_buffer[nb] = '\0'; + /* Signal input waiting that input is read and wait for it being handled * SignalObjectAndWait() should be used here, but it's unsupported in Win98< */ SetEvent(_hInputReady); @@ -245,9 +248,7 @@ static void DedicatedHandleKeyInput() SetEvent(_hWaitForInputHandling); #endif - /* strtok() does not 'forget' \r\n if the string starts with it, - * so we have to manually remove that! */ - strtok(input_line, "\r\n"); + /* Remove trailing \r or \n */ for (char *c = input_line; *c != '\0'; c++) { if (*c == '\n' || *c == '\r' || c == lastof(input_line)) { *c = '\0';