sw/source/core/doc/DocumentRedlineManager.cxx |   11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

New commits:
commit 656ff63ed045dfaedff7f34dc4adc0b203850543
Author:     Michael Stahl <michael.st...@allotropia.de>
AuthorDate: Wed Aug 10 15:56:28 2022 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Fri Aug 12 21:29:46 2022 +0200

    tdf#149548 Revert "tdf#119840 loop backwards in ...
    
    ... DocumentRedlineManager::SplitRedline"
    
    This reverts commit 4701d17bfe785f00958ad58a63dc0ece4c5c3281.
    
    Somehow this reintroduces the crash.
    
    Change-Id: If6866cc59a1032f283aa8374d303b028f2cba486
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/138094
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/sw/source/core/doc/DocumentRedlineManager.cxx 
b/sw/source/core/doc/DocumentRedlineManager.cxx
index f46135f56c6c..01ddc18e9538 100644
--- a/sw/source/core/doc/DocumentRedlineManager.cxx
+++ b/sw/source/core/doc/DocumentRedlineManager.cxx
@@ -2488,13 +2488,10 @@ bool DocumentRedlineManager::SplitRedline( const SwPaM& 
rRange )
 {
     bool bChg = false;
     auto [pStt, pEnd] = rRange.StartEnd(); // SwPosition*
+    SwRedlineTable::size_type n = 0;
     //FIXME overlapping problem GetRedline( *pStt, &n );
-    // Loop backwards, because we are mostly called with rRange pointing
-    // something near the end of the table.
-    SwRedlineTable::size_type n = maRedlineTable.size();
-    while (n != 0)
+    for ( ; n < maRedlineTable.size(); ++n)
     {
-        --n;
         SwRangeRedline * pRedline = maRedlineTable[ n ];
         auto [pRedlineStart, pRedlineEnd] = pRedline->StartEnd();
         if (*pRedlineStart <= *pStt && *pEnd <= *pRedlineEnd)
@@ -2525,7 +2522,7 @@ bool DocumentRedlineManager::SplitRedline( const SwPaM& 
rRange )
 
             case 3:
                 
pRedline->InvalidateRange(SwRangeRedline::Invalidation::Remove);
-                maRedlineTable.DeleteAndDestroy( n );
+                maRedlineTable.DeleteAndDestroy( n-- );
                 pRedline = nullptr;
                 break;
             }
@@ -2538,7 +2535,7 @@ bool DocumentRedlineManager::SplitRedline( const SwPaM& 
rRange )
             if( pNew )
                 maRedlineTable.Insert( pNew, n );
         }
-        else if (*pRedlineEnd < *pStt)
+        else if (*pEnd < *pRedlineStart)
             break;
     }
     return bChg;

Reply via email to