[PATCH] Resolves: rhbz#907933 crash on removing second last para in ...

Caolán McNamara (via_Code_Review) gerrit at gerrit.libreoffice.org
Tue Feb 5 14:46:54 PST 2013


Hi,

I have submitted a patch for review:

    https://gerrit.libreoffice.org/2012

To pull it, you can do:

    git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/12/2012/1

Resolves: rhbz#907933 crash on removing second last para in cell...

if (basically) the last para is on next page

Change-Id: Iaff610ea94a829e73bfb8c694a27e0e9b4f6e295
---
M sw/source/core/inc/tabfrm.hxx
M sw/source/core/layout/tabfrm.cxx
2 files changed, 22 insertions(+), 0 deletions(-)



diff --git a/sw/source/core/inc/tabfrm.hxx b/sw/source/core/inc/tabfrm.hxx
index 464fc9c..1041385 100644
--- a/sw/source/core/inc/tabfrm.hxx
+++ b/sw/source/core/inc/tabfrm.hxx
@@ -151,6 +151,8 @@
     //
     sal_Bool HasFollowFlowLine() const { return bHasFollowFlowLine; }
     void SetFollowFlowLine( sal_Bool bNew ) { bHasFollowFlowLine = bNew; }
+    //return the SwTabFrm (if any) that this SwTabFrm is a follow flow line for
+    SwTabFrm* GetFollowFlowLineFor();
 
     sal_Bool IsRebuildLastLine() const { return bIsRebuildLastLine; }
     void SetRebuildLastLine( sal_Bool bNew ) { bIsRebuildLastLine = bNew; }
diff --git a/sw/source/core/layout/tabfrm.cxx b/sw/source/core/layout/tabfrm.cxx
index 27ad754..fb23128 100644
--- a/sw/source/core/layout/tabfrm.cxx
+++ b/sw/source/core/layout/tabfrm.cxx
@@ -132,8 +132,28 @@
 extern const SwTabFrm  *pRowCacheLastTabFrm;
 extern const SwFrm     *pRowCacheLastCellFrm;
 
+//return the SwTabFrm (if any) that this SwTabFrm is a follow flow line for
+SwTabFrm* SwTabFrm::GetFollowFlowLineFor()
+{
+    SwFlowFrm *pPrec = GetPrecede();
+    if (pPrec && pPrec->GetFrm()->IsTabFrm())
+    {
+        SwTabFrm *pPrevTabFrm = (SwTabFrm*)pPrec;
+        assert(this == pPrevTabFrm->GetFollow());
+        if (pPrevTabFrm->HasFollowFlowLine() && pPrevTabFrm->GetFollow() == this)
+            return pPrevTabFrm;
+    }
+    return NULL;
+}
+
 SwTabFrm::~SwTabFrm()
 {
+    //rhbz#907933, we are a follow flow line for something and have been
+    //deleted, remove ourself as a follow flowline
+    SwTabFrm* pFlowFrameFor = GetFollowFlowLineFor();
+    if (pFlowFrameFor)
+        pFlowFrameFor->RemoveFollowFlowLine();
+
     // There is some terrible code in fetab.cxx, that
     // makes use of these global pointers. Obviously
     // this code did not consider that a TabFrm can be

-- 
To view, visit https://gerrit.libreoffice.org/2012
To unsubscribe, visit https://gerrit.libreoffice.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Iaff610ea94a829e73bfb8c694a27e0e9b4f6e295
Gerrit-PatchSet: 1
Gerrit-Project: core
Gerrit-Branch: master
Gerrit-Owner: Caolán McNamara <caolanm at redhat.com>


More information about the LibreOffice mailing list