Kaydet (Commit) 66686e44 authored tarafından Caolán McNamara's avatar Caolán McNamara

guard against infinite recursion on registering styles

Change-Id: Iabedfcce9d8ef21172e6bd0d654f3a258aae97e3
üst a0c4ce34
...@@ -148,7 +148,7 @@ void Lwp9Reader::ParseDocument() ...@@ -148,7 +148,7 @@ void Lwp9Reader::ParseDocument()
//Register Styles //Register Styles
RegisteArrowStyles(); RegisteArrowStyles();
doc->RegisterStyle(); doc->DoRegisterStyle();
XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager();
pXFStyleManager->ToXml(m_pStream); pXFStyleManager->ToXml(m_pStream);
......
...@@ -597,7 +597,7 @@ void LwpCellLayout::RegisterStyle() ...@@ -597,7 +597,7 @@ void LwpCellLayout::RegisterStyle()
if (pObj.is()) if (pObj.is())
{ {
pObj->SetFoundry(m_pFoundry); pObj->SetFoundry(m_pFoundry);
pObj->RegisterStyle(); pObj->DoRegisterStyle();
} }
//register child layout style //register child layout style
......
...@@ -224,7 +224,7 @@ void LwpDocument::RegisterStyle() ...@@ -224,7 +224,7 @@ void LwpDocument::RegisterStyle()
rtl::Reference<LwpObject> pDocSock = GetSocket().obj(); rtl::Reference<LwpObject> pDocSock = GetSocket().obj();
if(pDocSock.is()) if(pDocSock.is())
{ {
pDocSock->RegisterStyle(); pDocSock->DoRegisterStyle();
} }
} }
/** /**
...@@ -322,7 +322,7 @@ void LwpDocument::RegisterGraphicsStyles() ...@@ -322,7 +322,7 @@ void LwpDocument::RegisterGraphicsStyles()
if(pGraphic.is()) if(pGraphic.is())
{ {
pGraphic->SetFoundry(m_pFoundry); pGraphic->SetFoundry(m_pFoundry);
pGraphic->RegisterStyle(); pGraphic->DoRegisterStyle();
} }
} }
/** /**
...@@ -619,7 +619,7 @@ LwpDocument* LwpDocument::GetPreviousDivision() ...@@ -619,7 +619,7 @@ LwpDocument* LwpDocument::GetPreviousDivision()
LwpDocument* pDivision = GetFirstDivision(); LwpDocument* pDivision = GetFirstDivision();
while (pDivision) while (pDivision && pDivision != this)
{ {
LwpDocument* pContentDivision = pDivision->GetFirstDivisionWithContentsThatIsNotOLE(); LwpDocument* pContentDivision = pDivision->GetFirstDivisionWithContentsThatIsNotOLE();
if(pContentDivision) if(pContentDivision)
...@@ -782,11 +782,11 @@ void LwpDocSock::RegisterStyle() ...@@ -782,11 +782,11 @@ void LwpDocSock::RegisterStyle()
{ {
rtl::Reference<LwpObject> pDoc = GetNext().obj(); rtl::Reference<LwpObject> pDoc = GetNext().obj();
if(pDoc.is()) if(pDoc.is())
pDoc->RegisterStyle(); pDoc->DoRegisterStyle();
pDoc = GetChildHead().obj(); pDoc = GetChildHead().obj();
if(pDoc.is()) if(pDoc.is())
pDoc->RegisterStyle(); pDoc->DoRegisterStyle();
} }
/** /**
* @descr parse contents of documents plugged * @descr parse contents of documents plugged
......
...@@ -160,7 +160,7 @@ void LwpFnCellLayout::RegisterStyle() ...@@ -160,7 +160,7 @@ void LwpFnCellLayout::RegisterStyle()
if (pObj.is()) if (pObj.is())
{ {
pObj->SetFoundry(m_pFoundry); pObj->SetFoundry(m_pFoundry);
pObj->RegisterStyle(); pObj->DoRegisterStyle();
} }
} }
...@@ -237,7 +237,7 @@ void LwpEnSuperTableLayout::RegisterStyle() ...@@ -237,7 +237,7 @@ void LwpEnSuperTableLayout::RegisterStyle()
if (pTableLayout != nullptr) if (pTableLayout != nullptr)
{ {
pTableLayout->SetFoundry(m_pFoundry); pTableLayout->SetFoundry(m_pFoundry);
pTableLayout->RegisterStyle(); pTableLayout->DoRegisterStyle();
} }
} }
......
...@@ -174,7 +174,7 @@ void LwpFootnote::RegisterStyle() ...@@ -174,7 +174,7 @@ void LwpFootnote::RegisterStyle()
if(pContent) if(pContent)
{ {
pContent->SetFoundry(m_pFoundry); pContent->SetFoundry(m_pFoundry);
pContent->RegisterStyle(); pContent->DoRegisterStyle();
} }
} }
} }
......
...@@ -188,7 +188,7 @@ void LwpFoundry::RegisterAllLayouts() ...@@ -188,7 +188,7 @@ void LwpFoundry::RegisterAllLayouts()
if( pStyle.is() ) if( pStyle.is() )
{ {
pStyle->SetFoundry(this); pStyle->SetFoundry(this);
pStyle->RegisterStyle(); pStyle->DoRegisterStyle();
} }
//register content page layout list: Layout //register content page layout list: Layout
...@@ -196,7 +196,7 @@ void LwpFoundry::RegisterAllLayouts() ...@@ -196,7 +196,7 @@ void LwpFoundry::RegisterAllLayouts()
if( pStyle.is() ) if( pStyle.is() )
{ {
pStyle->SetFoundry(this); pStyle->SetFoundry(this);
pStyle->RegisterStyle(); pStyle->DoRegisterStyle();
} }
//Register page style layout list: PageStyle, such as "Default Page" //Register page style layout list: PageStyle, such as "Default Page"
...@@ -204,7 +204,7 @@ void LwpFoundry::RegisterAllLayouts() ...@@ -204,7 +204,7 @@ void LwpFoundry::RegisterAllLayouts()
if( pStyle.is() ) if( pStyle.is() )
{ {
pStyle->SetFoundry(this); pStyle->SetFoundry(this);
pStyle->RegisterStyle(); pStyle->DoRegisterStyle();
} }
//Register FrameStyle //Register FrameStyle
...@@ -212,7 +212,7 @@ void LwpFoundry::RegisterAllLayouts() ...@@ -212,7 +212,7 @@ void LwpFoundry::RegisterAllLayouts()
if( pStyle.is() ) if( pStyle.is() )
{ {
pStyle->SetFoundry(this); pStyle->SetFoundry(this);
pStyle->RegisterStyle(); pStyle->DoRegisterStyle();
} }
} }
......
...@@ -862,7 +862,7 @@ void LwpFrameLayout::RegisterStyle() ...@@ -862,7 +862,7 @@ void LwpFrameLayout::RegisterStyle()
if (content.is()) if (content.is())
{ {
content->SetFoundry(m_pFoundry); content->SetFoundry(m_pFoundry);
content->RegisterStyle(); content->DoRegisterStyle();
} }
//register child frame style //register child frame style
......
...@@ -102,7 +102,7 @@ void LwpFribFrame::RegisterStyle(LwpFoundry* pFoundry) ...@@ -102,7 +102,7 @@ void LwpFribFrame::RegisterStyle(LwpFoundry* pFoundry)
if (!pLayout) if (!pLayout)
return; return;
pLayout->SetFoundry(pFoundry); pLayout->SetFoundry(pFoundry);
pLayout->RegisterStyle(); pLayout->DoRegisterStyle();
//register next frib text style //register next frib text style
sal_uInt8 nType = pLayout->GetRelativeType(); sal_uInt8 nType = pLayout->GetRelativeType();
......
...@@ -486,7 +486,7 @@ void LwpHeadLayout::RegisterStyle() ...@@ -486,7 +486,7 @@ void LwpHeadLayout::RegisterStyle()
OSL_FAIL("Layout points to itself"); OSL_FAIL("Layout points to itself");
break; break;
} }
pLayout->RegisterStyle(); pLayout->DoRegisterStyle();
} }
LwpVirtualLayout *pNext = dynamic_cast<LwpVirtualLayout*>(pLayout->GetNext().obj().get()); LwpVirtualLayout *pNext = dynamic_cast<LwpVirtualLayout*>(pLayout->GetNext().obj().get());
if (pNext == pLayout) if (pNext == pLayout)
......
...@@ -89,7 +89,7 @@ void LwpFribNote::RegisterNewStyle() ...@@ -89,7 +89,7 @@ void LwpFribNote::RegisterNewStyle()
LwpFrib::RegisterStyle(m_pPara->GetFoundry()); LwpFrib::RegisterStyle(m_pPara->GetFoundry());
//register foonote style //register foonote style
pLayout->SetFoundry(m_pPara->GetFoundry()); pLayout->SetFoundry(m_pPara->GetFoundry());
pLayout->RegisterStyle(); pLayout->DoRegisterStyle();
} }
} }
...@@ -169,7 +169,7 @@ void LwpNoteLayout::RegisterStyle() ...@@ -169,7 +169,7 @@ void LwpNoteLayout::RegisterStyle()
if(pTextLayout) if(pTextLayout)
{ {
pTextLayout->SetFoundry(GetFoundry()); pTextLayout->SetFoundry(GetFoundry());
pTextLayout->RegisterStyle(); pTextLayout->DoRegisterStyle();
} }
} }
...@@ -281,7 +281,7 @@ void LwpNoteTextLayout::RegisterStyle() ...@@ -281,7 +281,7 @@ void LwpNoteTextLayout::RegisterStyle()
if(pContent.is()) if(pContent.is())
{ {
pContent->SetFoundry(GetFoundry()); pContent->SetFoundry(GetFoundry());
pContent->RegisterStyle(); pContent->DoRegisterStyle();
} }
} }
......
...@@ -60,7 +60,7 @@ ...@@ -60,7 +60,7 @@
* @descr construct lwpobject from stream * @descr construct lwpobject from stream
*/ */
LwpObject::LwpObject(LwpObjectHeader objHdr, LwpSvStream* pStrm) LwpObject::LwpObject(LwpObjectHeader objHdr, LwpSvStream* pStrm)
: m_ObjHdr(objHdr), m_pObjStrm(nullptr), m_pFoundry(nullptr), 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(), m_pObjStrm = new LwpObjectStream(pStrm, m_ObjHdr.IsCompressed(),
static_cast<sal_uInt16>(m_ObjHdr.GetSize()) ); static_cast<sal_uInt16>(m_ObjHdr.GetSize()) );
......
...@@ -88,11 +88,22 @@ protected: ...@@ -88,11 +88,22 @@ protected:
LwpObjectStream* m_pObjStrm; LwpObjectStream* m_pObjStrm;
LwpFoundry* m_pFoundry; LwpFoundry* m_pFoundry;
LwpSvStream* m_pStrm; LwpSvStream* m_pStrm;
bool m_bRegisteringStyle;
protected: protected:
virtual void Read(); virtual void Read();
virtual void RegisterStyle();
public: public:
void QuickRead(); 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 Parse(IXFStream* pOutputStream);
virtual void XFConvert(XFContentContainer* pCont); virtual void XFConvert(XFContentContainer* pCont);
......
...@@ -881,7 +881,7 @@ void LwpHeaderLayout::RegisterStyle(XFMasterPage* mp1) ...@@ -881,7 +881,7 @@ void LwpHeaderLayout::RegisterStyle(XFMasterPage* mp1)
//Call the RegisterStyle first to register the styles in header paras, and then XFConvert() //Call the RegisterStyle first to register the styles in header paras, and then XFConvert()
pStory->SetFoundry(m_pFoundry); pStory->SetFoundry(m_pFoundry);
pStory->RegisterStyle(); pStory->DoRegisterStyle();
//, 06/27/2005 //, 06/27/2005
//register child layout style for framelayout, //register child layout style for framelayout,
RegisterChildStyle(); RegisterChildStyle();
...@@ -1034,7 +1034,7 @@ void LwpFooterLayout::RegisterStyle(XFMasterPage* mp1) ...@@ -1034,7 +1034,7 @@ void LwpFooterLayout::RegisterStyle(XFMasterPage* mp1)
pChangeMgr->SetHeadFootFribMap(true); pChangeMgr->SetHeadFootFribMap(true);
pStory->SetFoundry(m_pFoundry); pStory->SetFoundry(m_pFoundry);
pStory->RegisterStyle(); pStory->DoRegisterStyle();
//register child layout style for framelayout, //register child layout style for framelayout,
RegisterChildStyle(); RegisterChildStyle();
......
...@@ -77,7 +77,7 @@ void LwpVersionedPointer::RegisterStyle() ...@@ -77,7 +77,7 @@ void LwpVersionedPointer::RegisterStyle()
if( pObj.is() ) if( pObj.is() )
{ {
pObj->SetFoundry(m_pFoundry); pObj->SetFoundry(m_pFoundry);
pObj->RegisterStyle(); pObj->DoRegisterStyle();
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment