From 1ddc05e822387a4dfc8c902e0e88ab59f97923b7 Mon Sep 17 00:00:00 2001 From: rubidium Date: Wed, 10 Nov 2010 17:49:44 +0000 Subject: [PATCH] (svn r21134) -Change: perform some more stringent validity checking on the language files --- src/strgen/strgen.cpp | 3 ++- src/strings.cpp | 11 ++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/strgen/strgen.cpp b/src/strgen/strgen.cpp index a752cdc406..d13291b03b 100644 --- a/src/strgen/strgen.cpp +++ b/src/strgen/strgen.cpp @@ -935,7 +935,8 @@ static void WriteStringsH(const char *filename) fprintf(_output_file, "\nstatic const StringID STR_LAST_STRINGID = 0x%X;\n\n", next - 1); fprintf(_output_file, - "static const uint LANGUAGE_PACK_VERSION = 0x%X;\n\n", (uint)_hash + "static const uint LANGUAGE_PACK_VERSION = 0x%X;\n" + "static const uint LANGUAGE_MAX_PLURAL = %d;\n\n", (uint)_hash, (uint)lengthof(_plural_forms) ); fprintf(_output_file, "#endif /* TABLE_STRINGS_H */\n"); diff --git a/src/strings.cpp b/src/strings.cpp index b2318ccc47..3318acdd4b 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -1307,7 +1307,16 @@ bool LanguagePackHeader::IsValid() const { return this->ident == TO_LE32(LanguagePackHeader::IDENT) && - this->version == TO_LE32(LANGUAGE_PACK_VERSION); + this->version == TO_LE32(LANGUAGE_PACK_VERSION) && + this->plural_form < LANGUAGE_MAX_PLURAL && + this->text_dir <= 1 && + this->newgrflangid < MAX_LANG && + StrValid(this->name, lastof(this->name)) && + StrValid(this->own_name, lastof(this->own_name)) && + StrValid(this->isocode, lastof(this->isocode)) && + StrValid(this->digit_group_separator, lastof(this->digit_group_separator)) && + StrValid(this->digit_group_separator_currency, lastof(this->digit_group_separator_currency)) && + StrValid(this->digit_decimal_separator, lastof(this->digit_decimal_separator)); } bool ReadLanguagePack(int lang_index)