diff options
author | moneromooo-monero <moneromooo-monero@users.noreply.github.com> | 2019-01-07 16:04:45 +0000 |
---|---|---|
committer | moneromooo-monero <moneromooo-monero@users.noreply.github.com> | 2019-01-08 16:03:30 +0000 |
commit | 584126d15bacbcb170d71a18264e4e3a2e469386 (patch) | |
tree | b997f4be3e1ed330cc7061409eea6cbea0c45048 /src/common/i18n.cpp | |
parent | Merge pull request #4969 (diff) | |
download | monero-584126d15bacbcb170d71a18264e4e3a2e469386.tar.xz |
i18n: filter LANG/LC_LANG for valid characters, and handle @
If there are more valid characters, add them in, I did not find
an actual list.
Diffstat (limited to '')
-rw-r--r-- | src/common/i18n.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/common/i18n.cpp b/src/common/i18n.cpp index ffe8d8b52..a32875945 100644 --- a/src/common/i18n.cpp +++ b/src/common/i18n.cpp @@ -38,6 +38,8 @@ #undef MONERO_DEFAULT_LOG_CATEGORY #define MONERO_DEFAULT_LOG_CATEGORY "i18n" +#define MAX_LANGUAGE_SIZE 16 + static const unsigned char qm_magic[16] = {0x3c, 0xb8, 0x64, 0x18, 0xca, 0xef, 0x9c, 0x95, 0xcd, 0x21, 0x1c, 0xbf, 0x60, 0xa1, 0xbd, 0xdd}; static std::map<std::string,std::string> i18n_entries; @@ -62,7 +64,19 @@ std::string i18n_get_language() std::string language = e; language = language.substr(0, language.find(".")); + language = language.substr(0, language.find("@")); + + // check valid values + for (char c: language) + if (!strchr("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-.@", c)) + return "en"; + std::transform(language.begin(), language.end(), language.begin(), tolower); + if (language.size() > MAX_LANGUAGE_SIZE) + { + i18n_log("Language from LANG/LC_ALL suspiciously long, defaulting to en"); + return "en"; + } return language; } |