[Libreoffice-commits] core.git: Branch 'libreoffice-5-0' - lotuswordpro/source

Caolán McNamara caolanm at redhat.com
Wed Dec 9 13:52:44 PST 2015


 lotuswordpro/source/filter/lwp9reader.cxx     |    2 +-
 lotuswordpro/source/filter/lwpcelllayout.cxx  |    2 +-
 lotuswordpro/source/filter/lwpdoc.cxx         |   10 +++++-----
 lotuswordpro/source/filter/lwpfnlayout.cxx    |    4 ++--
 lotuswordpro/source/filter/lwpfootnote.cxx    |    2 +-
 lotuswordpro/source/filter/lwpfoundry.cxx     |    8 ++++----
 lotuswordpro/source/filter/lwpframelayout.cxx |    2 +-
 lotuswordpro/source/filter/lwpfribframe.cxx   |    2 +-
 lotuswordpro/source/filter/lwplayout.cxx      |    2 +-
 lotuswordpro/source/filter/lwpnotes.cxx       |    6 +++---
 lotuswordpro/source/filter/lwpobj.cxx         |    2 +-
 lotuswordpro/source/filter/lwpobj.hxx         |   13 ++++++++++++-
 lotuswordpro/source/filter/lwppagelayout.cxx  |    5 ++---
 lotuswordpro/source/filter/lwpvpointer.cxx    |    2 +-
 14 files changed, 36 insertions(+), 26 deletions(-)

New commits:
commit fdc0c739c0b4925485f6a8a2ece8113c895e4ca3
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Wed Dec 9 21:32:21 2015 +0000

    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 at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>
    (cherry picked from commit 282b1aa32c27a513eb2858ad6e7e534ef52c1b99)
    
    Change-Id: Iabedfcce9d8ef21172e6bd0d654f3a258aae97e3
    Reviewed-on: https://gerrit.libreoffice.org/20555
    Reviewed-by: David Tardon <dtardon at redhat.com>
    Tested-by: David Tardon <dtardon at redhat.com>

diff --git a/lotuswordpro/source/filter/lwp9reader.cxx b/lotuswordpro/source/filter/lwp9reader.cxx
index f23c8fc..e74d02e 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 c5ac645..6b27d73 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 e3412fc..0a3597e 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 86ddc5f..e02c597 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 5c64d00..86c69ff 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 d343520..3e2609f 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 61325da..d902a04 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 fc16cfd..9f0161e 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 e4bb189..8d0cce5 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 02a4de5..dd08b17 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 7e15b62..010b60e 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 942e044..99e1821 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 08b7615..3eef758 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 796e0d4..9d1a7dc 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();
     }
 }
 


More information about the Libreoffice-commits mailing list