summaryrefslogtreecommitdiff
path: root/src/game/game_text.cpp
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/game_text.cpp
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/game_text.cpp')
-rw-r--r--src/game/game_text.cpp25
1 files changed, 14 insertions, 11 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) {