From 5ab39cc65176bc150625995a6a639625a7b1f579 Mon Sep 17 00:00:00 2001 From: frosch Date: Sun, 12 Jan 2014 17:59:43 +0000 Subject: (svn r26238) -Codechange: Use StringParameters::GetDataLeft to check for left space in the param array. --- src/strings.cpp | 4 ++-- 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 { -- cgit v1.2.3-54-g00ecf