From bf0f5345ea7441d0c99f7b75da1f9f7e3947ff57 Mon Sep 17 00:00:00 2001 From: frosch Date: Sun, 6 Oct 2013 12:13:20 +0000 Subject: (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. --- src/game/game_text.cpp | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) (limited to 'src/game/game_text.cpp') 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) { -- cgit v1.2.3-54-g00ecf