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;