svl/source/numbers/zforlist.cxx |   17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

New commits:
commit 37b30be41d24c3659dbf64b46c490e94869fca7f
Author:     Eike Rathke <er...@redhat.com>
AuthorDate: Mon Jun 20 17:13:53 2022 +0200
Commit:     Eike Rathke <er...@redhat.com>
CommitDate: Mon Jun 20 22:45:27 2022 +0200

    Resolves: tdf#147265 Return correct default if currency format is duplicate
    
    For the default currency format
    SvNumberFormatter::GetCurrencyFormatStrings() returned always the
    last added position, regardless whether that format was added or
    not, which it isn't if the format code is a duplicate. Let
    addToCurrencyFormatsList() return the position of the existing
    format if the duplicate was rejected and use that for default.
    
    Change-Id: I148d7379de75cae402b063f7b2f92947e345176f
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/136187
    Reviewed-by: Eike Rathke <er...@redhat.com>
    Tested-by: Jenkins
    (cherry picked from commit cbcdea550e08ffa2fd01215f0a14790225608076)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/136165

diff --git a/svl/source/numbers/zforlist.cxx b/svl/source/numbers/zforlist.cxx
index c1d45cc9bd60..0c1e28661fb8 100644
--- a/svl/source/numbers/zforlist.cxx
+++ b/svl/source/numbers/zforlist.cxx
@@ -4290,12 +4290,16 @@ void SvNumberFormatter::ImpInitCurrencyTable()
 }
 
 
-static void addToCurrencyFormatsList( NfWSStringsDtor& rStrArr, const 
OUString& rFormat )
+static std::ptrdiff_t addToCurrencyFormatsList( NfWSStringsDtor& rStrArr, 
const OUString& rFormat )
 {
     // Prevent duplicates even over subsequent calls of
     // GetCurrencyFormatStrings() with the same vector.
-    if (std::find( rStrArr.begin(), rStrArr.end(), rFormat) == rStrArr.end())
-        rStrArr.push_back( rFormat);
+    NfWSStringsDtor::const_iterator it( std::find( rStrArr.begin(), 
rStrArr.end(), rFormat));
+    if (it != rStrArr.end())
+        return it - rStrArr.begin();
+
+    rStrArr.push_back( rFormat);
+    return rStrArr.size() - 1;
 }
 
 
@@ -4324,9 +4328,7 @@ sal_uInt16 SvNumberFormatter::GetCurrencyFormatStrings( 
NfWSStringsDtor& rStrArr
                          + ";"
                          + aRed
                          + aNegativeBank;
-        addToCurrencyFormatsList( rStrArr, format2);
-
-        nDefault = rStrArr.size() - 1;
+        nDefault = addToCurrencyFormatsList( rStrArr, format2);
     }
     else
     {
@@ -4379,8 +4381,7 @@ sal_uInt16 SvNumberFormatter::GetCurrencyFormatStrings( 
NfWSStringsDtor& rStrArr
         {
             addToCurrencyFormatsList( rStrArr, format3);
         }
-        addToCurrencyFormatsList( rStrArr, format4);
-        nDefault = rStrArr.size() - 1;
+        nDefault = addToCurrencyFormatsList( rStrArr, format4);
         if (rCurr.GetDigits())
         {
             addToCurrencyFormatsList( rStrArr, format5);

Reply via email to