summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2015-04-22 14:28:38 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2015-04-24 07:26:23 +0000
commit6ccddc00775a5ec20b7b0bc35232ecbbbfd53958 (patch)
tree1473fe1c9022b09e1393e84d2146bd600ae64e16 /sw
parentfbd4f63ed876dcbd209cfd4050f723387e088e1c (diff)
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. Change-Id: Ie827a7b66fa9690bbabaf53204e9ec77247239f2 (cherry picked from commit 28764d7ed5df874c2bfbc6025a97968e08cf2315) Reviewed-on: https://gerrit.libreoffice.org/15480 Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk> Tested-by: Miklos Vajna <vmiklos@collabora.co.uk>
Diffstat (limited to 'sw')
-rw-r--r--sw/source/core/doc/docredln.cxx23
1 files changed, 14 insertions, 9 deletions
diff --git a/sw/source/core/doc/docredln.cxx b/sw/source/core/doc/docredln.cxx
index 91a2b58dc66c..bdec0386aa49 100644
--- a/sw/source/core/doc/docredln.cxx
+++ b/sw/source/core/doc/docredln.cxx
@@ -121,7 +121,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<const SwTableCellRedline*>(pExtraRedline);
@@ -136,11 +136,13 @@ 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
+ }
}
}
else
@@ -158,14 +160,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 )