diff options
author | Caolán McNamara <caolan.mcnamara@collabora.com> | 2024-04-01 21:17:26 +0100 |
---|---|---|
committer | Caolán McNamara <caolan.mcnamara@collabora.com> | 2024-04-02 20:45:14 +0200 |
commit | db040630d664fa20bc4f8995d2168fcce51a8bfd (patch) | |
tree | c8ce30ba2974404d25557b26e7b725c8b8f063dd /svl | |
parent | 38f731ff67142a423aa6f46dc3e92d094f86ffb1 (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.cxx | 19 |
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 |