sc/source/core/inc/interpre.hxx | 14 +++++++------- sc/source/core/tool/interpr1.cxx | 9 ++++----- sc/source/core/tool/interpr2.cxx | 4 +--- sc/source/core/tool/interpr5.cxx | 2 +- sc/source/core/tool/interpr8.cxx | 18 +++++++++--------- 5 files changed, 22 insertions(+), 25 deletions(-)
New commits: commit 1c635de6ed48dec4566341c174351432ddab757d Author: Mike Kaganski <mike.kagan...@collabora.com> AuthorDate: Sun Feb 6 18:48:44 2022 +0100 Commit: Mike Kaganski <mike.kagan...@collabora.com> CommitDate: Sun Feb 6 21:06:55 2022 +0100 Avoid excessive reallocations Change-Id: I68ff7021c26dd2148f85506fd0c67e233753c63a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/129558 Tested-by: Mike Kaganski <mike.kagan...@collabora.com> Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> diff --git a/sc/source/core/inc/interpre.hxx b/sc/source/core/inc/interpre.hxx index 322b2e32d5a0..2e90271af4c0 100644 --- a/sc/source/core/inc/interpre.hxx +++ b/sc/source/core/inc/interpre.hxx @@ -481,11 +481,11 @@ private: // Check for String overflow of rResult+rAdd and set error and erase rResult // if so. Return true if ok, false if overflow - inline bool CheckStringResultLen( OUString& rResult, const OUString& rAdd ); + inline bool CheckStringResultLen( OUString& rResult, sal_Int32 nIncrease ); // Check for String overflow of rResult+rAdd and set error and erase rResult // if so. Return true if ok, false if overflow - inline bool CheckStringResultLen( OUStringBuffer& rResult, const OUString& rAdd ); + inline bool CheckStringResultLen( OUStringBuffer& rResult, sal_Int32 nIncrease ); // Set error according to rVal, and set rVal to 0.0 if there was an error. inline void TreatDoubleError( double& rVal ); @@ -1113,9 +1113,9 @@ inline sal_Int32 ScInterpreter::GetStringPositionArgument() return static_cast<sal_Int32>(fVal); } -inline bool ScInterpreter::CheckStringResultLen( OUString& rResult, const OUString& rAdd ) +inline bool ScInterpreter::CheckStringResultLen( OUString& rResult, sal_Int32 nIncrease ) { - if (rAdd.getLength() > kScInterpreterMaxStrLen - rResult.getLength()) + if (nIncrease > kScInterpreterMaxStrLen - rResult.getLength()) { SetError( FormulaError::StringOverflow ); rResult.clear(); @@ -1124,12 +1124,12 @@ inline bool ScInterpreter::CheckStringResultLen( OUString& rResult, const OUStri return true; } -inline bool ScInterpreter::CheckStringResultLen( OUStringBuffer& rResult, const OUString& rAdd ) +inline bool ScInterpreter::CheckStringResultLen( OUStringBuffer& rResult, sal_Int32 nIncrease ) { - if (rAdd.getLength() > kScInterpreterMaxStrLen - rResult.getLength()) + if (nIncrease > kScInterpreterMaxStrLen - rResult.getLength()) { SetError( FormulaError::StringOverflow ); - rResult = OUStringBuffer(); + rResult.setLength(0); return false; } return true; diff --git a/sc/source/core/tool/interpr1.cxx b/sc/source/core/tool/interpr1.cxx index 450b70f264b9..983f2aca8020 100644 --- a/sc/source/core/tool/interpr1.cxx +++ b/sc/source/core/tool/interpr1.cxx @@ -8865,9 +8865,8 @@ void ScInterpreter::ScReplace() aOldStr.iterateCodePoints( &nIdx ); ++nCnt; } - aOldStr = aOldStr.replaceAt( nStart, nIdx - nStart, u"" ); - if ( CheckStringResultLen( aOldStr, aNewStr ) ) - aOldStr = aOldStr.replaceAt( nStart, 0, aNewStr ); + if ( CheckStringResultLen( aOldStr, aNewStr.getLength() - (nIdx - nStart) ) ) + aOldStr = aOldStr.replaceAt( nStart, nIdx - nStart, aNewStr ); PushString( aOldStr ); } } @@ -9704,7 +9703,7 @@ void ScInterpreter::ScSubstitute() oResult.emplace(sStr.getLength() + sNewStr.getLength() - sOldStr.getLength()); oResult->append(sStr.subView(nPos, nEnd - nPos)); // Copy leading unchanged text - if (!CheckStringResultLen(*oResult, sNewStr)) + if (!CheckStringResultLen(*oResult, sNewStr.getLength())) return PushError(GetError()); oResult->append(sNewStr); // Copy the replacement nPos = nEnd + sOldStr.getLength(); @@ -9750,7 +9749,7 @@ void ScInterpreter::ScConcat() while( nParamCount-- > 0) { OUString aStr = GetString().getString(); - if (CheckStringResultLen( aRes, aStr)) + if (CheckStringResultLen(aRes, aStr.getLength())) aRes = aStr + aRes; else break; diff --git a/sc/source/core/tool/interpr2.cxx b/sc/source/core/tool/interpr2.cxx index 6525f2a6784b..fda54fcf898f 100644 --- a/sc/source/core/tool/interpr2.cxx +++ b/sc/source/core/tool/interpr2.cxx @@ -3033,10 +3033,8 @@ void ScInterpreter::ScRoman() sal_Int32 nPad = nDigit % 5; if (nPad) { - OUStringBuffer aBuf(aRoman); - comphelper::string::padToLength(aBuf, aBuf.getLength() + nPad, + comphelper::string::padToLength(aRoman, aRoman.getLength() + nPad, pChars[nIndex]); - aRoman = aBuf.makeStringAndClear(); } nVal %= pValues[ nIndex ]; } diff --git a/sc/source/core/tool/interpr5.cxx b/sc/source/core/tool/interpr5.cxx index f29fd1eaf941..fc192bfbdbd9 100644 --- a/sc/source/core/tool/interpr5.cxx +++ b/sc/source/core/tool/interpr5.cxx @@ -1489,7 +1489,7 @@ void ScInterpreter::ScAmpersand() } else { - if ( CheckStringResultLen( sStr1, sStr2 ) ) + if ( CheckStringResultLen( sStr1, sStr2.getLength() ) ) sStr1 += sStr2; PushString(sStr1); } diff --git a/sc/source/core/tool/interpr8.cxx b/sc/source/core/tool/interpr8.cxx index a24b2b949a50..124205e46aaa 100644 --- a/sc/source/core/tool/interpr8.cxx +++ b/sc/source/core/tool/interpr8.cxx @@ -1396,7 +1396,7 @@ void ScInterpreter::ScConcat_MS() case svDouble: { const OUString& rStr = GetString().getString(); - if (CheckStringResultLen( aResBuf, rStr)) + if (CheckStringResultLen(aResBuf, rStr.getLength())) aResBuf.append( rStr); } break; @@ -1412,7 +1412,7 @@ void ScInterpreter::ScConcat_MS() svl::SharedString aSS; GetCellString( aSS, aCell); const OUString& rStr = aSS.getString(); - if (CheckStringResultLen( aResBuf, rStr)) + if (CheckStringResultLen(aResBuf, rStr.getLength())) aResBuf.append( rStr); } } @@ -1452,7 +1452,7 @@ void ScInterpreter::ScConcat_MS() svl::SharedString aSS; GetCellString( aSS, aCell); const OUString& rStr = aSS.getString(); - if (CheckStringResultLen( aResBuf, rStr)) + if (CheckStringResultLen(aResBuf, rStr.getLength())) aResBuf.append( rStr); } } @@ -1479,7 +1479,7 @@ void ScInterpreter::ScConcat_MS() if ( pMat->IsStringOrEmpty( j, k ) ) { const OUString& rStr = pMat->GetString( j, k ).getString(); - if (CheckStringResultLen( aResBuf, rStr)) + if (CheckStringResultLen(aResBuf, rStr.getLength())) aResBuf.append( rStr); } else @@ -1487,7 +1487,7 @@ void ScInterpreter::ScConcat_MS() if ( pMat->IsValue( j, k ) ) { const OUString& rStr = pMat->GetString( *pFormatter, j, k ).getString(); - if (CheckStringResultLen( aResBuf, rStr)) + if (CheckStringResultLen(aResBuf, rStr.getLength())) aResBuf.append( rStr); } } @@ -1658,7 +1658,7 @@ void ScInterpreter::ScTextJoin_MS() } else bFirst = false; - if (CheckStringResultLen( aResBuf, aStr)) + if (CheckStringResultLen(aResBuf, aStr.getLength())) aResBuf.append( aStr ); } } @@ -1690,7 +1690,7 @@ void ScInterpreter::ScTextJoin_MS() } else bFirst = false; - if (CheckStringResultLen( aResBuf, aStr)) + if (CheckStringResultLen(aResBuf, aStr.getLength())) aResBuf.append( aStr ); } } @@ -1747,7 +1747,7 @@ void ScInterpreter::ScTextJoin_MS() } else bFirst = false; - if (CheckStringResultLen( aResBuf, aStr)) + if (CheckStringResultLen(aResBuf, aStr.getLength())) aResBuf.append( aStr ); } } @@ -1796,7 +1796,7 @@ void ScInterpreter::ScTextJoin_MS() } else bFirst = false; - if (CheckStringResultLen( aResBuf, aStr)) + if (CheckStringResultLen(aResBuf, aStr.getLength())) aResBuf.append( aStr ); } }