sc/source/core/data/column2.cxx |   12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)

New commits:
commit 32b2d00853d049bacb60cfb40e732602da048c89
Author:     Mike Kaganski <mike.kagan...@collabora.com>
AuthorDate: Fri Mar 17 09:30:44 2023 +0000
Commit:     Mike Kaganski <mike.kagan...@collabora.com>
CommitDate: Fri Mar 17 18:39:27 2023 +0000

    tdf#148008: do not proceed after the marked range
    
    Implementation error in commit c008dc483f8c6840803983e7e351cec6fdd32070
    ("Switch to using multi_type_vector for cell storage.", 2013-06-24).
    
    Change-Id: I1e946b3b816db3d24f79a10fe8aa0dfc673b2e4a
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149026
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>

diff --git a/sc/source/core/data/column2.cxx b/sc/source/core/data/column2.cxx
index 1e879df34870..edc11bd54244 100644
--- a/sc/source/core/data/column2.cxx
+++ b/sc/source/core/data/column2.cxx
@@ -808,22 +808,20 @@ sal_uInt16 ScColumn::GetOptimalColWidth(
 
         // Go though all non-empty cells within selection.
         sc::CellStoreType::const_iterator itPos = maCells.begin();
-        for (const auto& rMarkedSpan : aMarkedSpans)
+        for (auto [ nRow, nRow2 ] : aMarkedSpans)
         {
-            SCROW nRow1 = rMarkedSpan.mnRow1, nRow2 = rMarkedSpan.mnRow2;
-            SCROW nRow = nRow1;
             while (nRow <= nRow2)
             {
-                std::pair<sc::CellStoreType::const_iterator,size_t> aPos = 
maCells.position(itPos, nRow);
-                itPos = aPos.first;
+                size_t nOffset;
+                std::tie(itPos, nOffset) = maCells.position(itPos, nRow);
                 if (itPos->type == sc::element_type_empty)
                 {
                     // Skip empty cells.
-                    nRow += itPos->size - aPos.second;
+                    nRow += itPos->size - nOffset;
                     continue;
                 }
 
-                for (size_t nOffset = aPos.second; nOffset < itPos->size; 
++nOffset, ++nRow)
+                for (; nOffset < itPos->size && nRow <= nRow2; ++nOffset, 
++nRow)
                 {
                     SvtScriptType nScript = rDocument.GetScriptType(nCol, 
nRow, nTab);
                     if (nScript == SvtScriptType::NONE)

Reply via email to