diff options
author | Caolán McNamara <caolanm@redhat.com> | 2015-12-09 21:32:21 +0000 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2015-12-10 16:14:40 +0100 |
commit | fb48608278c98d3a369b74d883c885be153c5a29 (patch) | |
tree | bd821b40f7d21a0412684aa46fc1bb783a72799a /lotuswordpro | |
parent | b45d0523981c7b51dbc1faafe3d705b6f3c58757 (diff) |
guard against infinite recursion on registering styles
(cherry picked from commit 66686e443b568ad5aab1b32b3f25eb73487cfef6)
Reviewed-on: https://gerrit.libreoffice.org/20554
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
(cherry picked from commit 282b1aa32c27a513eb2858ad6e7e534ef52c1b99)
Change-Id: Iabedfcce9d8ef21172e6bd0d654f3a258aae97e3
Reviewed-on: https://gerrit.libreoffice.org/20555
Reviewed-by: David Tardon <dtardon@redhat.com>
Tested-by: David Tardon <dtardon@redhat.com>
(cherry picked from commit fdc0c739c0b4925485f6a8a2ece8113c895e4ca3)
Diffstat (limited to 'lotuswordpro')
-rw-r--r-- | lotuswordpro/source/filter/lwp9reader.cxx | 2 | ||||
-rw-r--r-- | lotuswordpro/source/filter/lwpcelllayout.cxx | 2 | ||||
-rw-r--r-- | lotuswordpro/source/filter/lwpdoc.cxx | 10 | ||||
-rw-r--r-- | lotuswordpro/source/filter/lwpfnlayout.cxx | 4 | ||||
-rw-r--r-- | lotuswordpro/source/filter/lwpfootnote.cxx | 2 | ||||
-rw-r--r-- | lotuswordpro/source/filter/lwpfoundry.cxx | 8 | ||||
-rw-r--r-- | lotuswordpro/source/filter/lwpframelayout.cxx | 2 | ||||
-rw-r--r-- | lotuswordpro/source/filter/lwpfribframe.cxx | 2 | ||||
-rw-r--r-- | lotuswordpro/source/filter/lwplayout.cxx | 2 | ||||
-rw-r--r-- | lotuswordpro/source/filter/lwpnotes.cxx | 6 | ||||
-rw-r--r-- | lotuswordpro/source/filter/lwpobj.cxx | 2 | ||||
-rw-r--r-- | lotuswordpro/source/filter/lwpobj.hxx | 13 | ||||
-rw-r--r-- | lotuswordpro/source/filter/lwppagelayout.cxx | 5 | ||||
-rw-r--r-- | lotuswordpro/source/filter/lwpvpointer.cxx | 2 |
14 files changed, 36 insertions, 26 deletions
diff --git a/lotuswordpro/source/filter/lwp9reader.cxx b/lotuswordpro/source/filter/lwp9reader.cxx index f23c8fcbd076..e74d02eb4eb4 100644 --- a/lotuswordpro/source/filter/lwp9reader.cxx +++ b/lotuswordpro/source/filter/lwp9reader.cxx @@ -192,7 +192,7 @@ void Lwp9Reader::ParseDocument() //Register Styles RegisteArrowStyles(); - doc->RegisterStyle(); + doc->DoRegisterStyle(); XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); pXFStyleManager->ToXml(m_pStream); diff --git a/lotuswordpro/source/filter/lwpcelllayout.cxx b/lotuswordpro/source/filter/lwpcelllayout.cxx index c5ac6458a453..6b27d73667fd 100644 --- a/lotuswordpro/source/filter/lwpcelllayout.cxx +++ b/lotuswordpro/source/filter/lwpcelllayout.cxx @@ -598,7 +598,7 @@ void LwpCellLayout::RegisterStyle() if (pObj.is()) { pObj->SetFoundry(m_pFoundry); - pObj->RegisterStyle(); + pObj->DoRegisterStyle(); } //register child layout style diff --git a/lotuswordpro/source/filter/lwpdoc.cxx b/lotuswordpro/source/filter/lwpdoc.cxx index e3412fc90117..0a3597e29433 100644 --- a/lotuswordpro/source/filter/lwpdoc.cxx +++ b/lotuswordpro/source/filter/lwpdoc.cxx @@ -224,7 +224,7 @@ void LwpDocument::RegisterStyle() rtl::Reference<LwpObject> pDocSock = GetSocket().obj(); if(pDocSock.is()) { - pDocSock->RegisterStyle(); + pDocSock->DoRegisterStyle(); } } /** @@ -322,7 +322,7 @@ void LwpDocument::RegisterGraphicsStyles() if(pGraphic.is()) { pGraphic->SetFoundry(m_pFoundry); - pGraphic->RegisterStyle(); + pGraphic->DoRegisterStyle(); } } /** @@ -619,7 +619,7 @@ LwpDocument* LwpDocument::GetPreviousDivision() LwpDocument* pDivision = GetFirstDivision(); - while (pDivision) + while (pDivision && pDivision != this) { LwpDocument* pContentDivision = pDivision->GetFirstDivisionWithContentsThatIsNotOLE(); if(pContentDivision) @@ -782,11 +782,11 @@ void LwpDocSock::RegisterStyle() { rtl::Reference<LwpObject> pDoc = GetNext().obj(); if(pDoc.is()) - pDoc->RegisterStyle(); + pDoc->DoRegisterStyle(); pDoc = GetChildHead().obj(); if(pDoc.is()) - pDoc->RegisterStyle(); + pDoc->DoRegisterStyle(); } /** * @descr parse contents of documents plugged diff --git a/lotuswordpro/source/filter/lwpfnlayout.cxx b/lotuswordpro/source/filter/lwpfnlayout.cxx index 86ddc5fb5452..e02c59736c3d 100644 --- a/lotuswordpro/source/filter/lwpfnlayout.cxx +++ b/lotuswordpro/source/filter/lwpfnlayout.cxx @@ -164,7 +164,7 @@ void LwpFnCellLayout::RegisterStyle() if (pObj.is()) { pObj->SetFoundry(m_pFoundry); - pObj->RegisterStyle(); + pObj->DoRegisterStyle(); } } @@ -241,7 +241,7 @@ void LwpEnSuperTableLayout::RegisterStyle() if (pTableLayout != NULL) { pTableLayout->SetFoundry(m_pFoundry); - pTableLayout->RegisterStyle(); + pTableLayout->DoRegisterStyle(); } } diff --git a/lotuswordpro/source/filter/lwpfootnote.cxx b/lotuswordpro/source/filter/lwpfootnote.cxx index 5c64d00ba1a1..86c69ffd69af 100644 --- a/lotuswordpro/source/filter/lwpfootnote.cxx +++ b/lotuswordpro/source/filter/lwpfootnote.cxx @@ -181,7 +181,7 @@ void LwpFootnote::RegisterStyle() if(pContent) { pContent->SetFoundry(m_pFoundry); - pContent->RegisterStyle(); + pContent->DoRegisterStyle(); } } } diff --git a/lotuswordpro/source/filter/lwpfoundry.cxx b/lotuswordpro/source/filter/lwpfoundry.cxx index d343520ae96e..3e2609fd0daa 100644 --- a/lotuswordpro/source/filter/lwpfoundry.cxx +++ b/lotuswordpro/source/filter/lwpfoundry.cxx @@ -202,7 +202,7 @@ void LwpFoundry::RegisterAllLayouts() if( pStyle.is() ) { pStyle->SetFoundry(this); - pStyle->RegisterStyle(); + pStyle->DoRegisterStyle(); } //register content page layout list: Layout @@ -210,7 +210,7 @@ void LwpFoundry::RegisterAllLayouts() if( pStyle.is() ) { pStyle->SetFoundry(this); - pStyle->RegisterStyle(); + pStyle->DoRegisterStyle(); } //Register page style layout list: PageStyle, such as "Default Page" @@ -218,7 +218,7 @@ void LwpFoundry::RegisterAllLayouts() if( pStyle.is() ) { pStyle->SetFoundry(this); - pStyle->RegisterStyle(); + pStyle->DoRegisterStyle(); } //Register FrameStyle @@ -226,7 +226,7 @@ void LwpFoundry::RegisterAllLayouts() if( pStyle.is() ) { pStyle->SetFoundry(this); - pStyle->RegisterStyle(); + pStyle->DoRegisterStyle(); } } diff --git a/lotuswordpro/source/filter/lwpframelayout.cxx b/lotuswordpro/source/filter/lwpframelayout.cxx index 61325da000b0..d902a0491a22 100644 --- a/lotuswordpro/source/filter/lwpframelayout.cxx +++ b/lotuswordpro/source/filter/lwpframelayout.cxx @@ -867,7 +867,7 @@ void LwpFrameLayout::RegisterStyle() if (content.is()) { content->SetFoundry(m_pFoundry); - content->RegisterStyle(); + content->DoRegisterStyle(); } //register child frame style diff --git a/lotuswordpro/source/filter/lwpfribframe.cxx b/lotuswordpro/source/filter/lwpfribframe.cxx index fc16cfd106a7..9f0161e83d72 100644 --- a/lotuswordpro/source/filter/lwpfribframe.cxx +++ b/lotuswordpro/source/filter/lwpfribframe.cxx @@ -108,7 +108,7 @@ void LwpFribFrame::RegisterStyle(LwpFoundry* pFoundry) if (!pLayout) return; pLayout->SetFoundry(pFoundry); - pLayout->RegisterStyle(); + pLayout->DoRegisterStyle(); //register next frib text style sal_uInt8 nType = pLayout->GetRelativeType(); diff --git a/lotuswordpro/source/filter/lwplayout.cxx b/lotuswordpro/source/filter/lwplayout.cxx index e4bb189931cf..8d0cce5ab842 100644 --- a/lotuswordpro/source/filter/lwplayout.cxx +++ b/lotuswordpro/source/filter/lwplayout.cxx @@ -511,7 +511,7 @@ void LwpHeadLayout::RegisterStyle() OSL_FAIL("Layout points to itself"); break; } - pLayout->RegisterStyle(); + pLayout->DoRegisterStyle(); } LwpVirtualLayout *pNext = dynamic_cast<LwpVirtualLayout*>(pLayout->GetNext().obj().get()); if (pNext == pLayout) diff --git a/lotuswordpro/source/filter/lwpnotes.cxx b/lotuswordpro/source/filter/lwpnotes.cxx index 02a4de55b9f5..dd08b1762cdc 100644 --- a/lotuswordpro/source/filter/lwpnotes.cxx +++ b/lotuswordpro/source/filter/lwpnotes.cxx @@ -92,7 +92,7 @@ void LwpFribNote::RegisterNewStyle() LwpFrib::RegisterStyle(m_pPara->GetFoundry()); //register foonote style pLayout->SetFoundry(m_pPara->GetFoundry()); - pLayout->RegisterStyle(); + pLayout->DoRegisterStyle(); } } @@ -172,7 +172,7 @@ void LwpNoteLayout::RegisterStyle() if(pTextLayout) { pTextLayout->SetFoundry(GetFoundry()); - pTextLayout->RegisterStyle(); + pTextLayout->DoRegisterStyle(); } } @@ -284,7 +284,7 @@ void LwpNoteTextLayout::RegisterStyle() if(pContent.is()) { pContent->SetFoundry(GetFoundry()); - pContent->RegisterStyle(); + pContent->DoRegisterStyle(); } } diff --git a/lotuswordpro/source/filter/lwpobj.cxx b/lotuswordpro/source/filter/lwpobj.cxx index 7e15b6265fe3..010b60ebe253 100644 --- a/lotuswordpro/source/filter/lwpobj.cxx +++ b/lotuswordpro/source/filter/lwpobj.cxx @@ -64,7 +64,7 @@ * @descr construct lwpobject from stream */ LwpObject::LwpObject(LwpObjectHeader objHdr, LwpSvStream* pStrm) - : m_ObjHdr(objHdr), m_pObjStrm(NULL), m_pFoundry(NULL), m_pStrm(pStrm) + : m_ObjHdr(objHdr), m_pObjStrm(nullptr), m_pFoundry(nullptr), m_pStrm(pStrm), m_bRegisteringStyle(false) { m_pObjStrm = new LwpObjectStream(pStrm, m_ObjHdr.IsCompressed(), static_cast<sal_uInt16>(m_ObjHdr.GetSize()) ); diff --git a/lotuswordpro/source/filter/lwpobj.hxx b/lotuswordpro/source/filter/lwpobj.hxx index 942e04415dc8..99e18213ab99 100644 --- a/lotuswordpro/source/filter/lwpobj.hxx +++ b/lotuswordpro/source/filter/lwpobj.hxx @@ -92,11 +92,22 @@ protected: LwpObjectStream* m_pObjStrm; LwpFoundry* m_pFoundry; LwpSvStream* m_pStrm; + bool m_bRegisteringStyle; protected: virtual void Read(); + virtual void RegisterStyle(); public: void QuickRead(); - virtual void RegisterStyle(); + //calls RegisterStyle but bails if DoRegisterStyle is called + //on the same object recursively + void DoRegisterStyle() + { + if (m_bRegisteringStyle) + throw std::runtime_error("recursion in styles"); + m_bRegisteringStyle = true; + RegisterStyle(); + m_bRegisteringStyle = false; + } virtual void Parse(IXFStream* pOutputStream); virtual void XFConvert(XFContentContainer* pCont); diff --git a/lotuswordpro/source/filter/lwppagelayout.cxx b/lotuswordpro/source/filter/lwppagelayout.cxx index 08b76150a4ff..3eef7584d882 100644 --- a/lotuswordpro/source/filter/lwppagelayout.cxx +++ b/lotuswordpro/source/filter/lwppagelayout.cxx @@ -884,7 +884,7 @@ void LwpHeaderLayout::RegisterStyle(XFMasterPage* mp1) //Call the RegisterStyle first to register the styles in header paras, and then XFConvert() pStory->SetFoundry(m_pFoundry); - pStory->RegisterStyle(); + pStory->DoRegisterStyle(); //, 06/27/2005 //register child layout style for framelayout, RegisterChildStyle(); @@ -1037,8 +1037,7 @@ void LwpFooterLayout::RegisterStyle(XFMasterPage* mp1) pChangeMgr->SetHeadFootFribMap(true); pStory->SetFoundry(m_pFoundry); - pStory->RegisterStyle(); - //, 06/27/2005 + pStory->DoRegisterStyle(); //register child layout style for framelayout, RegisterChildStyle(); //End diff --git a/lotuswordpro/source/filter/lwpvpointer.cxx b/lotuswordpro/source/filter/lwpvpointer.cxx index 796e0d4b4b2a..9d1a7dcd047e 100644 --- a/lotuswordpro/source/filter/lwpvpointer.cxx +++ b/lotuswordpro/source/filter/lwpvpointer.cxx @@ -77,7 +77,7 @@ void LwpVersionedPointer::RegisterStyle() if( pObj.is() ) { pObj->SetFoundry(m_pFoundry); - pObj->RegisterStyle(); + pObj->DoRegisterStyle(); } } |