diff options
author | Caolán McNamara <caolanm@redhat.com> | 2015-05-08 16:46:48 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2015-05-08 16:56:43 +0100 |
commit | 068c4df48fd1d9f4c42864733b80e7cbd7f5d006 (patch) | |
tree | e0800d39acde399adf9c6624b53301d83ff0e340 | |
parent | 99e60d8d62b69d8b0b22d54e3f55c5151e7a2c2f (diff) |
Resolves: ooo#119155 don't crash with odd content in footnotes
hit it with a large and simple hammer
Change-Id: Ib0e55ad64780efc7664ccd9a2684fbe7dba87498
-rw-r--r-- | sw/source/core/inc/frame.hxx | 5 | ||||
-rw-r--r-- | sw/source/core/layout/calcmove.cxx | 2 | ||||
-rw-r--r-- | sw/source/core/layout/wsfrm.cxx | 1 | ||||
-rw-r--r-- | sw/source/core/text/frmform.cxx | 2 |
4 files changed, 10 insertions, 0 deletions
diff --git a/sw/source/core/inc/frame.hxx b/sw/source/core/inc/frame.hxx index bc729ca77ab0..165a94e4ed21 100644 --- a/sw/source/core/inc/frame.hxx +++ b/sw/source/core/inc/frame.hxx @@ -358,6 +358,7 @@ protected: bool mbColLocked : 1; // lock Grow/Shrink for column-wise section // or fly frames, will be set in Format bool m_isInDestroy : 1; + bool mbForbidDelete : 1; void ColLock() { mbColLocked = true; } void ColUnlock() { mbColLocked = false; } @@ -808,6 +809,7 @@ public: bool IsProtected() const; bool IsColLocked() const { return mbColLocked; } + bool IsDeleteForbidden() const { return mbForbidDelete; } /// this is the only way to delete a SwFrm instance static void DestroyFrm(SwFrm *const pFrm); @@ -858,6 +860,9 @@ public: void RegisterToFormat( SwFmt& rFmt ); void ValidateThisAndAllLowers( const sal_uInt16 nStage ); + void ForbidDelete() { mbForbidDelete = true; } + void AllowDelete() { mbForbidDelete = false; } + //UUUU drawinglayer::attribute::SdrAllFillAttributesHelperPtr getSdrAllFillAttributesHelper() const; bool supportsFullDrawingLayerFillAttributeSet() const; diff --git a/sw/source/core/layout/calcmove.cxx b/sw/source/core/layout/calcmove.cxx index d808f5cbad39..2a8226398ed4 100644 --- a/sw/source/core/layout/calcmove.cxx +++ b/sw/source/core/layout/calcmove.cxx @@ -1045,6 +1045,7 @@ void SwCntntFrm::MakeAll() return; } + ForbidDelete(); LockJoin(); long nFormatCount = 0; // - loop prevention @@ -1674,6 +1675,7 @@ void SwCntntFrm::MakeAll() delete pSaveFtn; UnlockJoin(); + AllowDelete(); if ( bMovedFwd || bMovedBwd ) pNotify->SetInvaKeep(); // OD 2004-02-26 #i25029# diff --git a/sw/source/core/layout/wsfrm.cxx b/sw/source/core/layout/wsfrm.cxx index 57f81cc033d4..caf63ca5d59f 100644 --- a/sw/source/core/layout/wsfrm.cxx +++ b/sw/source/core/layout/wsfrm.cxx @@ -78,6 +78,7 @@ SwFrm::SwFrm( SwModify *pMod, SwFrm* pSib ) : mbValidPos = mbValidPrtArea = mbValidSize = mbValidLineNum = mbRetouche = mbFixSize = mbColLocked = false; mbCompletePaint = mbInfInvalid = true; + mbForbidDelete = false; } const IDocumentDrawModelAccess* SwFrm::getIDocumentDrawModelAccess() diff --git a/sw/source/core/text/frmform.cxx b/sw/source/core/text/frmform.cxx index 3df734732838..802a131815ec 100644 --- a/sw/source/core/text/frmform.cxx +++ b/sw/source/core/text/frmform.cxx @@ -561,6 +561,8 @@ void SwTxtFrm::_AdjustFollow( SwTxtFormatter &rLine, OSL_FAIL( "+SwTxtFrm::JoinFrm: Follow is locked." ); return; } + if (GetFollow()->IsDeleteForbidden()) + return; JoinFrm(); } |