Browse Source

Fix a segfault caused by wrong textdomain lines in translation files (#11530)

* The problem were lines like these:
  "# textdomain:"
* str_split does not add an empty last part if there is a delimiter
  at the end, but this was probably assumed here.
DS 2 years ago
parent
commit
0709946c75
1 changed files with 7 additions and 1 deletions
  1. 7 1
      src/translation.cpp

+ 7 - 1
src/translation.cpp

@@ -64,7 +64,13 @@ void Translations::loadTranslation(const std::string &data)
 			line.resize(line.length() - 1);
 
 		if (str_starts_with(line, "# textdomain:")) {
-			textdomain = utf8_to_wide(trim(str_split(line, ':')[1]));
+			auto parts = str_split(line, ':');
+			if (parts.size() < 2) {
+				errorstream << "Invalid textdomain translation line \"" << line
+						<< "\"" << std::endl;
+				continue;
+			}
+			textdomain = utf8_to_wide(trim(parts[1]));
 		}
 		if (line.empty() || line[0] == '#')
 			continue;