From 37469a1e3eb5b3295f5b496e27fc6f0445699339 Mon Sep 17 00:00:00 2001 From: Michael Stahl Date: Wed, 22 Apr 2015 14:28:38 +0200 Subject: [PATCH] rhbz#1198848: sw: delete *all* table redlines to fix DOCX import crash SwExtraRedlineTbl::DeleteAllTableRedlines() increments its position even when deleting the current element from the vector. (cherry picked from commit 28764d7ed5df874c2bfbc6025a97968e08cf2315) Conflicts: sw/source/core/doc/docredln.cxx Change-Id: Ie827a7b66fa9690bbabaf53204e9ec77247239f2 --- sw/source/core/doc/docredln.cxx | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/sw/source/core/doc/docredln.cxx b/sw/source/core/doc/docredln.cxx index cb1520a..f7cdc7f 100644 --- a/sw/source/core/doc/docredln.cxx +++ b/sw/source/core/doc/docredln.cxx @@ -1529,7 +1529,7 @@ bool SwExtraRedlineTbl::DeleteAllTableRedlines( SwDoc* pDoc, const SwTable& rTab */ } - for(sal_uInt16 nCurRedlinePos = 0; nCurRedlinePos < GetSize(); ++nCurRedlinePos ) + for (sal_uInt16 nCurRedlinePos = 0; nCurRedlinePos < GetSize(); ) { SwExtraRedline* pExtraRedline = GetRedline(nCurRedlinePos); const SwTableCellRedline* pTableCellRedline = dynamic_cast(pExtraRedline); @@ -1544,11 +1544,12 @@ bool SwExtraRedlineTbl::DeleteAllTableRedlines( SwDoc* pDoc, const SwTable& rTab sal_uInt16 nRedlineType = aRedlineData.GetType(); // Check if this redline object type should be deleted - if( USHRT_MAX != nRedlineTypeToDelete && nRedlineTypeToDelete != nRedlineType ) - continue; - - DeleteAndDestroy( nCurRedlinePos ); - bChg = true; + if (USHRT_MAX == nRedlineTypeToDelete || nRedlineTypeToDelete == nRedlineType) + { + DeleteAndDestroy( nCurRedlinePos ); + bChg = true; + continue; // don't increment position after delete + } } } else @@ -1566,14 +1567,17 @@ bool SwExtraRedlineTbl::DeleteAllTableRedlines( SwDoc* pDoc, const SwTable& rTab sal_uInt16 nRedlineType = aRedlineData.GetType(); // Check if this redline object type should be deleted - if( USHRT_MAX != nRedlineTypeToDelete && nRedlineTypeToDelete != nRedlineType ) - continue; + if (USHRT_MAX == nRedlineTypeToDelete || nRedlineTypeToDelete == nRedlineType) - DeleteAndDestroy( nCurRedlinePos ); - bChg = true; + { + DeleteAndDestroy( nCurRedlinePos ); + bChg = true; + continue; // don't increment position after delete + } } } } + ++nCurRedlinePos; } if( bChg ) -- 2.1.0