[Libreoffice-commits] core.git: lotuswordpro/source

Caolán McNamara caolanm at redhat.com
Fri Jan 1 09:00:02 PST 2016


 lotuswordpro/source/filter/lwplayout.cxx |    5 +++--
 lotuswordpro/source/filter/lwplayout.hxx |   14 ++++++++++++--
 2 files changed, 15 insertions(+), 4 deletions(-)

New commits:
commit e8dc85c2b3fd197aa5d484be3fc2cb25f7bd2412
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Fri Jan 1 16:57:43 2016 +0000

    guard against infinite recursion in MarginsSameAsParent
    
    Change-Id: I09c1ccb850f0cb2365e52ee6ffd293ccf34ad00e

diff --git a/lotuswordpro/source/filter/lwplayout.cxx b/lotuswordpro/source/filter/lwplayout.cxx
index 32bc4fd..8f51ca4 100644
--- a/lotuswordpro/source/filter/lwplayout.cxx
+++ b/lotuswordpro/source/filter/lwplayout.cxx
@@ -74,6 +74,7 @@
 LwpVirtualLayout::LwpVirtualLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm)
     : LwpDLNFPVList(objHdr, pStrm)
     , m_bGettingHonorProtection(false)
+    , m_bGettingMarginsSameAsParent(false)
     , m_bGettingHasProtection(false)
     , m_bGettingIsProtected(false)
     , m_bGettingMarginsValue(false)
@@ -700,7 +701,7 @@ bool LwpMiddleLayout::MarginsSameAsParent()
     rtl::Reference<LwpObject> xBase(GetBasedOnStyle());
     if (LwpVirtualLayout* pLay = dynamic_cast<LwpVirtualLayout*>(xBase.get()))
     {
-        pLay->MarginsSameAsParent();
+        pLay->GetMarginsSameAsParent();
     }
     return LwpVirtualLayout::MarginsSameAsParent();
 }
@@ -714,7 +715,7 @@ double LwpMiddleLayout::MarginsValue(const sal_uInt8 &nWhichSide)
     double fValue = 0;
     if((nWhichSide==MARGIN_LEFT)||(nWhichSide==MARGIN_RIGHT))
     {
-        if ( MarginsSameAsParent() )
+        if ( GetMarginsSameAsParent() )
         {
             rtl::Reference<LwpVirtualLayout> xParent(dynamic_cast<LwpVirtualLayout*>(GetParent().obj().get()));
             if (xParent.is() && !xParent->IsHeader())
diff --git a/lotuswordpro/source/filter/lwplayout.hxx b/lotuswordpro/source/filter/lwplayout.hxx
index 64598dc..0456cfa 100644
--- a/lotuswordpro/source/filter/lwplayout.hxx
+++ b/lotuswordpro/source/filter/lwplayout.hxx
@@ -96,7 +96,6 @@ class LwpVirtualLayout : public LwpDLNFPVList
 public:
     LwpVirtualLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm);
     virtual ~LwpVirtualLayout(){}
-    virtual bool MarginsSameAsParent();
     inline virtual sal_uInt16 GetNumCols(){return 1;}
     virtual double GetColWidth(sal_uInt16 nIndex);
     virtual double GetColGap(sal_uInt16 nIndex);
@@ -119,6 +118,15 @@ public:
         m_bGettingHonorProtection = false;
         return bRet;
     }
+    bool GetMarginsSameAsParent()
+    {
+        if (m_bGettingMarginsSameAsParent)
+            throw std::runtime_error("recursion in layout");
+        m_bGettingMarginsSameAsParent = true;
+        bool bRet = MarginsSameAsParent();
+        m_bGettingMarginsSameAsParent = false;
+        return bRet;
+    }
     bool GetIsProtected()
     {
         if (m_bGettingIsProtected)
@@ -199,8 +207,10 @@ protected:
     virtual bool HonorProtection();
     virtual bool IsProtected();
     virtual double MarginsValue(const sal_uInt8& /*nWhichSide*/){return 0;}
+    virtual bool MarginsSameAsParent();
 protected:
     bool m_bGettingHonorProtection;
+    bool m_bGettingMarginsSameAsParent;
     bool m_bGettingHasProtection;
     bool m_bGettingIsProtected;
     bool m_bGettingMarginsValue;
@@ -313,7 +323,6 @@ class LwpMiddleLayout : public LwpVirtualLayout
 public:
     LwpMiddleLayout( LwpObjectHeader &objHdr, LwpSvStream* pStrm );
     virtual ~LwpMiddleLayout();
-    virtual bool MarginsSameAsParent() override;
     virtual double MarginsValue(const sal_uInt8& nWhichSide) override;
     virtual double GetExtMarginsValue(const sal_uInt8& nWhichSide) override;
     LwpLayoutGeometry* GetGeometry()
@@ -369,6 +378,7 @@ public:
 
 protected:
     void Read() override;
+    virtual bool MarginsSameAsParent() override;
 private:
     LwpObjectID m_BasedOnStyle;
     LwpLayoutGeometry* Geometry();


More information about the Libreoffice-commits mailing list