Blame SOURCES/0001-rhbz-1198848-sw-delete-all-table-redlines-to-fix-DOC.patch

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