diff options
author | Caolán McNamara <caolanm@redhat.com> | 2016-01-01 16:57:43 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2016-01-01 16:59:34 +0000 |
commit | e8dc85c2b3fd197aa5d484be3fc2cb25f7bd2412 (patch) | |
tree | dada115b91acbc8ee3225a34a512368f91e4cff7 /lotuswordpro/source | |
parent | b890a0ed02968589029fedf1854be83f1ffe8600 (diff) |
guard against infinite recursion in MarginsSameAsParent
Change-Id: I09c1ccb850f0cb2365e52ee6ffd293ccf34ad00e
Diffstat (limited to 'lotuswordpro/source')
-rw-r--r-- | lotuswordpro/source/filter/lwplayout.cxx | 5 | ||||
-rw-r--r-- | lotuswordpro/source/filter/lwplayout.hxx | 14 |
2 files changed, 15 insertions, 4 deletions
diff --git a/lotuswordpro/source/filter/lwplayout.cxx b/lotuswordpro/source/filter/lwplayout.cxx index 32bc4fda0f98..8f51ca44261e 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 64598dc89b6c..0456cfad1645 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(); |