summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2010-11-10 17:49:44 +0000
committerrubidium <rubidium@openttd.org>2010-11-10 17:49:44 +0000
commit1ddc05e822387a4dfc8c902e0e88ab59f97923b7 (patch)
tree6089c109bff78fd65a95113b36f3f1da2155099c
parent17b514ccd191f8aa57a1464c4223c3a3f5034ad9 (diff)
downloadopenttd-1ddc05e822387a4dfc8c902e0e88ab59f97923b7.tar.xz
(svn r21134) -Change: perform some more stringent validity checking on the language files
-rw-r--r--src/strgen/strgen.cpp3
-rw-r--r--src/strings.cpp11
2 files changed, 12 insertions, 2 deletions
diff --git a/src/strgen/strgen.cpp b/src/strgen/strgen.cpp
index a752cdc40..d13291b03 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 b2318ccc4..3318acdd4 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)