changeset 20048:7b49d51c1dd2 draft

(svn r24981) -Fix: handle corner case where an encoded string contains too many parameters more gracefully
author rubidium <rubidium@openttd.org>
date Fri, 08 Feb 2013 20:32:56 +0000
parents c7ea604e5c19
children cac151934646
files src/strings.cpp
diffstat 1 files changed, 7 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/strings.cpp
+++ b/src/strings.cpp
@@ -1048,8 +1048,13 @@
 				/* Strings that consume arguments */
 				StringID str = args->GetInt32(b);
 				if (game_script && GB(str, TAB_COUNT_OFFSET, TAB_COUNT_BITS) != GAME_TEXT_TAB) break;
-				StringParameters sub_args(*args, b - SCC_STRING1 + 1);
-				buff = GetStringWithArgs(buff, str, &sub_args, last, next_substr_case_index, game_script);
+				uint size = b - SCC_STRING1 + 1;
+				if (game_script && size > args->num_param - args->offset) {
+					buff = strecat(buff, "(too many parameters)", last);
+				} else {
+					StringParameters sub_args(*args, size);
+					buff = GetStringWithArgs(buff, str, &sub_args, last, next_substr_case_index, game_script);
+				}
 				next_substr_case_index = 0;
 				break;
 			}