summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2015-05-08 16:46:48 +0100
committerCaolán McNamara <caolanm@redhat.com>2015-05-08 16:56:43 +0100
commit068c4df48fd1d9f4c42864733b80e7cbd7f5d006 (patch)
treee0800d39acde399adf9c6624b53301d83ff0e340
parent99e60d8d62b69d8b0b22d54e3f55c5151e7a2c2f (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.hxx5
-rw-r--r--sw/source/core/layout/calcmove.cxx2
-rw-r--r--sw/source/core/layout/wsfrm.cxx1
-rw-r--r--sw/source/core/text/frmform.cxx2
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();
}