summaryrefslogtreecommitdiff
path: root/svl
diff options
context:
space:
mode:
authorCaolán McNamara <caolan.mcnamara@collabora.com>2024-04-01 21:17:26 +0100
committerCaolán McNamara <caolan.mcnamara@collabora.com>2024-04-02 20:45:14 +0200
commitdb040630d664fa20bc4f8995d2168fcce51a8bfd (patch)
treec8ce30ba2974404d25557b26e7b725c8b8f063dd /svl
parent38f731ff67142a423aa6f46dc3e92d094f86ffb1 (diff)
crashtesting: SvNFEngine::DefaultCurrencyRO assert
seen with forum-mso-en4-207468.xls so we will have to ensure that nDefaultSystemCurrencyFormat is set before using the RO mode Change-Id: Ib1e755203917ddd751a1493c817cc8383bbbc043 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/165658 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
Diffstat (limited to 'svl')
-rw-r--r--svl/source/numbers/zforlist.cxx19
1 files changed, 14 insertions, 5 deletions
diff --git a/svl/source/numbers/zforlist.cxx b/svl/source/numbers/zforlist.cxx
index 02e48b8468cc..a7a36cd6fdb2 100644
--- a/svl/source/numbers/zforlist.cxx
+++ b/svl/source/numbers/zforlist.cxx
@@ -242,8 +242,9 @@ void SvNumberFormatterRegistry_Impl::ConfigurationChanged( utl::ConfigurationBro
}
}
+static volatile bool bCurrencyTableInitialized = false;
+
SvNumberFormatterRegistry_Impl* SvNumberFormatter::pFormatterRegistry = nullptr;
-volatile bool SvNumberFormatter::bCurrencyTableInitialized = false;
namespace
{
NfCurrencyTable& theCurrencyTable()
@@ -3986,9 +3987,20 @@ SvNFEngine::Accessor SvNFEngine::GetRWPolicy(SvNFFormatData& rFormatData)
};
}
-SvNFEngine::Accessor SvNFEngine::GetROPolicy(const SvNFFormatData& rFormatData, SvNFFormatData::DefaultFormatKeysMap& rFormatCache)
+void SvNumberFormatter::PrepForRoMode()
{
SvNumberFormatter::GetTheCurrencyTable(); // create this now so threads don't attempt to create it simultaneously
+ if (m_aFormatData.nDefaultSystemCurrencyFormat == NUMBERFORMAT_ENTRY_NOT_FOUND)
+ {
+ m_aFormatData.ImpGetDefaultSystemCurrencyFormat(m_aCurrentLanguage, GetNatNum());
+ assert(m_aFormatData.nDefaultSystemCurrencyFormat != NUMBERFORMAT_ENTRY_NOT_FOUND);
+ }
+}
+
+SvNFEngine::Accessor SvNFEngine::GetROPolicy(const SvNFFormatData& rFormatData, SvNFFormatData::DefaultFormatKeysMap& rFormatCache)
+{
+ assert(rFormatData.nDefaultSystemCurrencyFormat != NUMBERFORMAT_ENTRY_NOT_FOUND && "ensure PrepForRoMode is called");
+ assert(bCurrencyTableInitialized && "ensure PrepForRoMode is called");
return
{
std::bind(SvNFEngine::GetCLOffsetRO, std::ref(rFormatData), std::placeholders::_1, std::placeholders::_2, std::placeholders::_3),
@@ -4129,7 +4141,6 @@ const NfCurrencyTable& SvNumberFormatter::GetTheCurrencyTable()
return theCurrencyTable();
}
-
// static
const NfCurrencyEntry* SvNumberFormatter::MatchSystemCurrency()
{
@@ -4138,7 +4149,6 @@ const NfCurrencyEntry* SvNumberFormatter::MatchSystemCurrency()
return nSystemCurrencyPosition ? &rTable[nSystemCurrencyPosition] : nullptr;
}
-
// static
const NfCurrencyEntry& SvNumberFormatter::GetCurrencyEntry( LanguageType eLang )
{
@@ -4801,7 +4811,6 @@ void SvNumberFormatter::ImpInitCurrencyTable()
bCurrencyTableInitialized = true;
}
-
static std::ptrdiff_t addToCurrencyFormatsList( NfWSStringsDtor& rStrArr, const OUString& rFormat )
{
// Prevent duplicates even over subsequent calls of