diff options
author | Lynx Linden <lynx@lindenlab.com> | 2010-06-22 18:33:39 +0100 |
---|---|---|
committer | Lynx Linden <lynx@lindenlab.com> | 2010-06-22 18:33:39 +0100 |
commit | 4c31f60bba890e5c320c4bc6fd0ca1c5ce741830 (patch) | |
tree | ec59361d190cc7a125e9fcaf88222dd2e30664f3 /indra/llcommon | |
parent | ff03cedb777a5ec6ac57f05068432831ad7ac7e7 (diff) |
EXT-7926 FIXED Fixed crash opening About for non-English locales.
Calling std::locale("fr_FR.UTF-8") crashes on Linux and Mac. Or
rather, it throws an exception when it doesn't know the locale and we
didn't handle the exception. I now catch the exception and output an
error rather than crash.
Note, this happened because of change 703f3bcf7069, which made us
actually pass a real locale string instead of just "C". So, we were
never actually supporting a locale for LLStringUtil::formatNumber().
There is therefore an open task of making formatNumber() actually
respect the locale. I'll report a separate JIRA to capture that task.
Diffstat (limited to 'indra/llcommon')
-rw-r--r-- | indra/llcommon/llstring.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/indra/llcommon/llstring.cpp b/indra/llcommon/llstring.cpp index f14d947734..f5eb552d99 100644 --- a/indra/llcommon/llstring.cpp +++ b/indra/llcommon/llstring.cpp @@ -994,7 +994,14 @@ void LLStringUtil::formatNumber(std::string& numStr, std::string decimals) convertToS32 (decimals, intDecimals); if (!sLocale.empty()) { - strStream.imbue (std::locale(sLocale.c_str())); + // imbue() throws if the locale is unknown! (EXT-7926) + try + { + strStream.imbue(std::locale(sLocale.c_str())); + } catch (const std::exception &e) + { + LL_WARNS_ONCE("Locale") << "Cannot set locale to " << sLocale << LL_ENDL; + } } if (!intDecimals) |