guard against infinite recursion on parsing objects

Change-Id: Ia6502afde54dbf379bc9951c80c6594f1f436ef5
diff --git a/lotuswordpro/source/filter/lwpdoc.cxx b/lotuswordpro/source/filter/lwpdoc.cxx
index a343f9c..2eb0c92 100644
--- a/lotuswordpro/source/filter/lwpdoc.cxx
+++ b/lotuswordpro/source/filter/lwpdoc.cxx
@@ -166,7 +166,7 @@ void LwpDocument::Parse(IXFStream* pOutputStream)
    rtl::Reference<LwpObject> pDocSock = GetSocket().obj( VO_DOCSOCK );
    if(pDocSock.is())
    {
        pDocSock->Parse(pOutputStream);
        pDocSock->DoParse(pOutputStream);
    }
}

@@ -412,7 +412,7 @@ void LwpDocument::ParseDocContent(IXFStream* pOutputStream)
        return;
    }
    pLayoutObj->SetFoundry(m_pFoundry);
    pLayoutObj->Parse(pOutputStream);
    pLayoutObj->DoParse(pOutputStream);
}

/**
@@ -795,11 +795,11 @@ void LwpDocSock::Parse(IXFStream* pOutputStream)
{
    rtl::Reference<LwpObject> pDoc = GetChildHead().obj();
    if(pDoc.is())
        pDoc->Parse(pOutputStream);
        pDoc->DoParse(pOutputStream);

    pDoc = GetNext().obj();
    if(pDoc.is())
        pDoc->Parse(pOutputStream);
        pDoc->DoParse(pOutputStream);
}

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/lotuswordpro/source/filter/lwpframelayout.cxx b/lotuswordpro/source/filter/lwpframelayout.cxx
index 996673de..1182172 100644
--- a/lotuswordpro/source/filter/lwpframelayout.cxx
+++ b/lotuswordpro/source/filter/lwpframelayout.cxx
@@ -1148,7 +1148,7 @@ void LwpDropcapLayout::Parse(IXFStream* pOutputStream)
    if(pPara.is())
    {
        pPara->SetFoundry(m_pFoundry);
        pPara->Parse(pOutputStream);
        pPara->DoParse(pOutputStream);
    }
}

diff --git a/lotuswordpro/source/filter/lwpobj.cxx b/lotuswordpro/source/filter/lwpobj.cxx
index e049a82..8839702 100644
--- a/lotuswordpro/source/filter/lwpobj.cxx
+++ b/lotuswordpro/source/filter/lwpobj.cxx
@@ -60,7 +60,8 @@
 * @descr  construct lwpobject from stream
 */
LwpObject::LwpObject(LwpObjectHeader objHdr, LwpSvStream* pStrm)
    : m_ObjHdr(objHdr), m_pObjStrm(nullptr), m_pFoundry(nullptr), m_pStrm(pStrm), m_bRegisteringStyle(false)
    : m_ObjHdr(objHdr), m_pObjStrm(nullptr), m_pFoundry(nullptr)
    , m_pStrm(pStrm), m_bRegisteringStyle(false), m_bParsingStyle(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 884ab42..bcd6136 100644
--- a/lotuswordpro/source/filter/lwpobj.hxx
+++ b/lotuswordpro/source/filter/lwpobj.hxx
@@ -91,9 +91,11 @@ protected:
    LwpFoundry* m_pFoundry;
    LwpSvStream* m_pStrm;
    bool m_bRegisteringStyle;
    bool m_bParsingStyle;
protected:
    virtual void Read();
    virtual void RegisterStyle();
    virtual void Parse(IXFStream* pOutputStream);
public:
    void QuickRead();
    //calls RegisterStyle but bails if DoRegisterStyle is called
@@ -106,7 +108,17 @@ public:
        RegisterStyle();
        m_bRegisteringStyle = false;
    }
    virtual void Parse(IXFStream* pOutputStream);
    //calls Parse but bails if DoParse is called
    //on the same object recursively
    void DoParse(IXFStream* pOutputStream)
    {
        if (m_bParsingStyle)
            throw std::runtime_error("recursion in parsing");
        m_bParsingStyle = true;
        Parse(pOutputStream);
        m_bParsingStyle = false;
    }

    virtual void XFConvert(XFContentContainer* pCont);

    LwpFoundry* GetFoundry(){return m_pFoundry;}
diff --git a/lotuswordpro/source/filter/lwppagelayout.cxx b/lotuswordpro/source/filter/lwppagelayout.cxx
index 7674868..3547661 100644
--- a/lotuswordpro/source/filter/lwppagelayout.cxx
+++ b/lotuswordpro/source/filter/lwppagelayout.cxx
@@ -124,7 +124,7 @@ void LwpPageLayout::Parse(IXFStream* pOutputStream)
    if(pStory.is())
    {
        pStory->SetFoundry(m_pFoundry);
        pStory->Parse(pOutputStream);   //Do not parse the next story
        pStory->DoParse(pOutputStream);   //Do not parse the next story
    }
}