From 4c31f60bba890e5c320c4bc6fd0ca1c5ce741830 Mon Sep 17 00:00:00 2001
From: Lynx Linden <lynx@lindenlab.com>
Date: Tue, 22 Jun 2010 18:33:39 +0100
Subject: [PATCH] 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.
---
 indra/llcommon/llstring.cpp | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/indra/llcommon/llstring.cpp b/indra/llcommon/llstring.cpp
index f14d947734e..f5eb552d994 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)
-- 
GitLab