basic/source/sbx/sbxcurr.cxx | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-)
New commits: commit bb169c209cddc1bfe5c383b18f0dd514ea1b74fd Author: Mike Kaganski <mike.kagan...@collabora.com> AuthorDate: Mon Sep 2 12:51:28 2024 +0500 Commit: Mike Kaganski <mike.kagan...@collabora.com> CommitDate: Mon Sep 2 12:53:32 2024 +0200 Fix ImpCurrencyToString to handle SAL_MIN_INT64 It can't be negated; so avoid the negation, and skip the minus in the string result. Also, avoid needless creation of OUString. Change-Id: If867c189b2ffd2794a58f66fd2511004ed4fc25a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/172733 Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> Tested-by: Jenkins diff --git a/basic/source/sbx/sbxcurr.cxx b/basic/source/sbx/sbxcurr.cxx index be4fed2b7bdd..5fcab97243ca 100644 --- a/basic/source/sbx/sbxcurr.cxx +++ b/basic/source/sbx/sbxcurr.cxx @@ -35,18 +35,20 @@ static OUString ImpCurrencyToString( sal_Int64 rVal ) sal_Unicode cDecimalSep, cThousandSepDummy, cDecimalSepAltDummy; ImpGetIntntlSep(cDecimalSep, cThousandSepDummy, cDecimalSepAltDummy); + auto strNum = OUString::number(rVal); + std::u16string_view aAbsStr(strNum); OUStringBuffer aBuf(22); if (rVal < 0) { aBuf.append('-'); - rVal = -rVal; + assert(aAbsStr[0] == '-'); + aAbsStr = aAbsStr.substr(1); // skip the minus } - OUString aAbsStr = OUString::number(rVal); - sal_Int32 hasFractDigits = std::min(aAbsStr.getLength(), sal_Int32(4)); - sal_Int32 hasWholeDigits = aAbsStr.getLength() - hasFractDigits; + size_t hasFractDigits = std::min(aAbsStr.length(), size_t(4)); + size_t hasWholeDigits = aAbsStr.length() - hasFractDigits; if (hasWholeDigits > 0) - aBuf.append(aAbsStr.subView(0, hasWholeDigits)); + aBuf.append(aAbsStr.substr(0, hasWholeDigits)); else aBuf.append('0'); aBuf.append(cDecimalSep); @@ -60,9 +62,9 @@ static OUString ImpCurrencyToString( sal_Int64 rVal ) // --- --------- --------- // 0 0.0000 0 // 0.1 0.1000 0.1 - for (sal_Int32 i = 4; i > hasFractDigits; --i) + for (size_t i = 4; i > hasFractDigits; --i) aBuf.append('0'); - aBuf.append(aAbsStr.subView(aAbsStr.getLength() - hasFractDigits, hasFractDigits)); + aBuf.append(aAbsStr.substr(aAbsStr.length() - hasFractDigits, hasFractDigits)); return aBuf.makeStringAndClear(); }