summaryrefslogtreecommitdiff
path: root/src/game
diff options
context:
space:
mode:
authorfrosch <frosch@openttd.org>2013-10-06 12:13:20 +0000
committerfrosch <frosch@openttd.org>2013-10-06 12:13:20 +0000
commitbf0f5345ea7441d0c99f7b75da1f9f7e3947ff57 (patch)
treebe2dfc61c7e814dd4ffec93eb001469d7b9fd9e6 /src/game
parent4912e3170e781ed97388ebc0a24c61779dd2662d (diff)
downloadopenttd-bf0f5345ea7441d0c99f7b75da1f9f7e3947ff57.tar.xz
(svn r25818) -Fix [FS#5750]: [GS] Language file scanner considered filenames starting with '.' as valid translations, resulting in languages with empty name, which causes trouble.
Diffstat (limited to 'src/game')
-rw-r--r--src/game/game_text.cpp25
-rw-r--r--src/game/game_text.hpp2
2 files changed, 15 insertions, 12 deletions
diff --git a/src/game/game_text.cpp b/src/game/game_text.cpp
index 27e379077..53c6795e9 100644
--- a/src/game/game_text.cpp
+++ b/src/game/game_text.cpp
@@ -60,18 +60,11 @@ void NORETURN CDECL strgen_fatal(const char *s, ...)
/**
* Create a new container for language strings.
* @param language The language name.
+ * @param end If not NULL, terminate \a language at this position.
*/
-LanguageStrings::LanguageStrings(const char *language)
+LanguageStrings::LanguageStrings(const char *language, const char *end)
{
- const char *p = strrchr(language, PATHSEPCHAR);
- if (p == NULL) {
- p = language;
- } else {
- p++;
- }
-
- const char *e = strchr(p, '.');
- this->language = e == NULL ? strdup(p) : strndup(p, e - p);
+ this->language = end == NULL ? strdup(language) : strndup(language, end - language);
}
/** Free everything. */
@@ -95,7 +88,17 @@ LanguageStrings *ReadRawLanguageStrings(const char *file)
return NULL;
}
- ret = new LanguageStrings(file);
+ const char *langname = strrchr(file, PATHSEPCHAR);
+ if (langname == NULL) {
+ langname = file;
+ } else {
+ langname++;
+ }
+
+ /* Check for invalid empty filename */
+ if (*langname == '.' || *langname == 0) return NULL;
+
+ ret = new LanguageStrings(langname, strchr(langname, '.'));
char buffer[2048];
while (to_read != 0 && fgets(buffer, sizeof(buffer), fh) != NULL) {
diff --git a/src/game/game_text.hpp b/src/game/game_text.hpp
index b367e63f9..19a31049e 100644
--- a/src/game/game_text.hpp
+++ b/src/game/game_text.hpp
@@ -26,7 +26,7 @@ struct LanguageStrings {
const char *language; ///< Name of the language (base filename).
StringList lines; ///< The lines of the file to pass into the parser/encoder.
- LanguageStrings(const char *language);
+ LanguageStrings(const char *language, const char *end = NULL);
~LanguageStrings();
};