lotuswordpro/source/filter/lwplayout.cxx | 5 +++-- lotuswordpro/source/filter/lwplayout.hxx | 14 ++++++++++++-- 2 files changed, 15 insertions(+), 4 deletions(-)
New commits: commit 54fe17fabaa258a48e18c4a19c29da2d2cf634ca Author: Caolán McNamara <caol...@redhat.com> Date: Fri Jan 1 16:57:43 2016 +0000 guard against infinite recursion in MarginsSameAsParent Change-Id: I09c1ccb850f0cb2365e52ee6ffd293ccf34ad00e (cherry picked from commit e8dc85c2b3fd197aa5d484be3fc2cb25f7bd2412) 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();
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits