summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2009-12-14 22:06:25 +0000
committerrubidium <rubidium@openttd.org>2009-12-14 22:06:25 +0000
commitc0d4bc5b87f4e369dd483fde007b053b29b77fd2 (patch)
tree0a40e583d697447d01485fd005c78b804e08a0fe
parent42507923892ee30e4ec2e9d079e1a63aab53c48a (diff)
downloadopenttd-c0d4bc5b87f4e369dd483fde007b053b29b77fd2.tar.xz
(svn r18502) -Fix: the dummy AI would could a NOT_REACHED if the translated error message contained a quote
-rw-r--r--src/ai/ai_info_dummy.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/ai/ai_info_dummy.cpp b/src/ai/ai_info_dummy.cpp
index 9036d2dfd..08307ca7c 100644
--- a/src/ai/ai_info_dummy.cpp
+++ b/src/ai/ai_info_dummy.cpp
@@ -63,6 +63,15 @@ void AI_CreateAIDummy(HSQUIRRELVM vm)
char error_message[1024];
GetString(error_message, STR_ERROR_AI_NO_AI_FOUND, lastof(error_message));
+ /* Make escapes for all quotes and slashes. */
+ char safe_error_message[1024];
+ char *q = safe_error_message;
+ for (const char *p = error_message; *p != '\0' && q < lastof(safe_error_message) - 2; p++, q++) {
+ if (*p == '"' || *p == '\\') *q++ = '\\';
+ *q = *p;
+ }
+ *q = '\0';
+
/* 2) We construct the AI's code. This is done by merging a header, body and footer */
char dummy_script[4096];
char *dp = dummy_script;
@@ -71,7 +80,7 @@ void AI_CreateAIDummy(HSQUIRRELVM vm)
/* As special trick we need to split the error message on newlines and
* emit each newline as a separate error printing string. */
char *newline;
- char *p = error_message;
+ char *p = safe_error_message;
do {
newline = strchr(p, '\n');
if (newline != NULL) *newline = '\0';