From c0d4bc5b87f4e369dd483fde007b053b29b77fd2 Mon Sep 17 00:00:00 2001 From: rubidium Date: Mon, 14 Dec 2009 22:06:25 +0000 Subject: (svn r18502) -Fix: the dummy AI would could a NOT_REACHED if the translated error message contained a quote --- src/ai/ai_info_dummy.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'src/ai/ai_info_dummy.cpp') 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'; -- cgit v1.2.3-70-g09d2