summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorfrosch <frosch@openttd.org>2014-04-24 17:49:31 +0000
committerfrosch <frosch@openttd.org>2014-04-24 17:49:31 +0000
commit0e8bfeb7a9e47473ae0c25c24f2d84d21cc88be9 (patch)
tree8e3b952e25cde6d07bba8d6824a451d3d7f608e5 /src
parent411cca2dc33054ee9901c559db35596807c93b7a (diff)
downloadopenttd-0e8bfeb7a9e47473ae0c25c24f2d84d21cc88be9.tar.xz
(svn r26496) -Fix (r1547): Reading console input on dedicated server relied on unspecified behaviour.
Diffstat (limited to 'src')
-rw-r--r--src/safeguards.h2
-rw-r--r--src/video/dedicated_v.cpp7
2 files changed, 5 insertions, 4 deletions
diff --git a/src/safeguards.h b/src/safeguards.h
index e4c8949f1..993b44b06 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 1d8992bb7..bfe853e9a 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';