diff options
author | frosch <frosch@openttd.org> | 2014-01-12 17:59:43 +0000 |
---|---|---|
committer | frosch <frosch@openttd.org> | 2014-01-12 17:59:43 +0000 |
commit | 5ab39cc65176bc150625995a6a639625a7b1f579 (patch) | |
tree | d6cafd199e6c10aa6e3f75dd610c00d6f2173be3 | |
parent | bc86bf9b12ba513e33aeab8a5ff7203009ba2d87 (diff) | |
download | openttd-5ab39cc65176bc150625995a6a639625a7b1f579.tar.xz |
(svn r26238) -Codechange: Use StringParameters::GetDataLeft to check for left space in the param array.
-rw-r--r-- | src/strings.cpp | 4 | ||||
-rw-r--r-- | src/strings_func.h | 8 |
2 files changed, 9 insertions, 3 deletions
diff --git a/src/strings.cpp b/src/strings.cpp index d29381cdb..97398194a 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -1022,7 +1022,7 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg /* WARNING. It's prohibited for the included string to consume any arguments. * For included strings that consume argument, you should use STRING1, STRING2 etc. * To debug stuff you can set argv to NULL and it will tell you */ - StringParameters tmp_params(args->GetDataPointer(), args->num_param - args->offset, NULL); + StringParameters tmp_params(args->GetDataPointer(), args->GetDataLeft(), NULL); buff = GetStringWithArgs(buff, str, &tmp_params, last, next_substr_case_index, game_script); next_substr_case_index = 0; break; @@ -1039,7 +1039,7 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg StringID str = args->GetInt32(b); if (game_script && GB(str, TAB_COUNT_OFFSET, TAB_COUNT_BITS) != GAME_TEXT_TAB) break; uint size = b - SCC_STRING1 + 1; - if (game_script && size > args->num_param - args->offset) { + if (game_script && size > args->GetDataLeft()) { buff = strecat(buff, "(too many parameters)", last); } else { StringParameters sub_args(*args, size); diff --git a/src/strings_func.h b/src/strings_func.h index 67a26a1b8..2c7809d02 100644 --- a/src/strings_func.h +++ b/src/strings_func.h @@ -56,7 +56,7 @@ public: offset(0), num_param(size) { - assert(size <= parent.num_param - parent.offset); + assert(size <= parent.GetDataLeft()); if (parent.type == NULL) { this->type = NULL; } else { @@ -89,6 +89,12 @@ public: return &this->data[this->offset]; } + /** Return the amount of elements which can still be read. */ + uint GetDataLeft() const + { + return this->num_param - this->offset; + } + /** Get a pointer to a specific element in the data array. */ uint64 *GetPointerToOffset(uint offset) const { |