Merge pull request #5047

584126d1 i18n: filter LANG/LC_LANG for valid characters, and handle @ (moneromooo-monero)
This commit is contained in:
Riccardo Spagni 2019-01-18 19:01:02 +02:00
commit 416b6719bd
No known key found for this signature in database
GPG Key ID: 55432DF31CCD4FCD
1 changed files with 14 additions and 0 deletions

View File

@ -38,6 +38,8 @@
#undef MONERO_DEFAULT_LOG_CATEGORY #undef MONERO_DEFAULT_LOG_CATEGORY
#define MONERO_DEFAULT_LOG_CATEGORY "i18n" #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 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; static std::map<std::string,std::string> i18n_entries;
@ -62,7 +64,19 @@ std::string i18n_get_language()
std::string language = e; std::string language = e;
language = language.substr(0, language.find(".")); 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); 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; return language;
} }