lotuswordpro/source/filter/lwplayout.cxx | 31 ++++++++++++++++++++++++------- lotuswordpro/source/filter/lwplayout.hxx | 12 ++---------- 2 files changed, 26 insertions(+), 17 deletions(-)
New commits: commit 089b7c342b5e64f45bf279d37b7261cca5c25d32 Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Fri Jul 27 08:58:56 2018 +0100 Commit: Michael Stahl <michael.st...@cib.de> CommitDate: Mon Jul 30 10:55:14 2018 +0200 ofz#9603 infinite recursion Change-Id: Ia4d0e3c1bb12330bd2f754e663055e1218da926f Reviewed-on: https://gerrit.libreoffice.org/58179 Tested-by: Jenkins Reviewed-by: Michael Stahl <michael.st...@cib.de> diff --git a/lotuswordpro/source/filter/lwplayout.cxx b/lotuswordpro/source/filter/lwplayout.cxx index 9c27ae7e8dab..29ba8482f375 100644 --- a/lotuswordpro/source/filter/lwplayout.cxx +++ b/lotuswordpro/source/filter/lwplayout.cxx @@ -592,6 +592,7 @@ void LwpLayoutMisc::Read(LwpObjectStream* pStrm) LwpMiddleLayout::LwpMiddleLayout( LwpObjectHeader const &objHdr, LwpSvStream* pStrm ) : LwpVirtualLayout(objHdr, pStrm) , m_bGettingGeometry(false) + , m_bGettingBackgroundStuff(false) { } @@ -659,21 +660,28 @@ rtl::Reference<LwpObject> LwpMiddleLayout::GetBasedOnStyle() * @descr: Get the geometry of current layout * */ -LwpLayoutGeometry* LwpMiddleLayout::Geometry() +LwpLayoutGeometry* LwpMiddleLayout::GetGeometry() { + if (m_bGettingGeometry) + throw std::runtime_error("recursion in layout"); + m_bGettingGeometry = true; + + LwpLayoutGeometry* pRet = nullptr; if( !m_LayGeometry.IsNull() ) { - return dynamic_cast<LwpLayoutGeometry*> (m_LayGeometry.obj().get()); + pRet = dynamic_cast<LwpLayoutGeometry*> (m_LayGeometry.obj().get()); } else { rtl::Reference<LwpObject> xBase(GetBasedOnStyle()); if (LwpMiddleLayout* pLay = dynamic_cast<LwpMiddleLayout*>(xBase.get())) { - return pLay->GetGeometry(); + pRet = pLay->GetGeometry(); } } - return nullptr; + + m_bGettingGeometry = false; + return pRet; } /** @@ -822,21 +830,30 @@ LwpBorderStuff* LwpMiddleLayout::GetBorderStuff() */ LwpBackgroundStuff* LwpMiddleLayout::GetBackgroundStuff() { + if (m_bGettingBackgroundStuff) + throw std::runtime_error("recursion in layout"); + m_bGettingBackgroundStuff = true; + + LwpBackgroundStuff* pRet = nullptr; + if(m_nOverrideFlag & OVER_BACKGROUND) { LwpLayoutBackground* pLayoutBackground = dynamic_cast<LwpLayoutBackground*>(m_LayBackgroundStuff.obj().get()); - return pLayoutBackground ? &pLayoutBackground->GetBackgoudStuff() : nullptr; + pRet = pLayoutBackground ? &pLayoutBackground->GetBackgoudStuff() : nullptr; } else { rtl::Reference<LwpObject> xBase(GetBasedOnStyle()); if (LwpMiddleLayout* pLay = dynamic_cast<LwpMiddleLayout*>(xBase.get())) { - return pLay->GetBackgroundStuff(); + pRet = pLay->GetBackgroundStuff(); } } - return nullptr; + + m_bGettingBackgroundStuff = false; + return pRet; } + /** * @descr: create xfborder. */ diff --git a/lotuswordpro/source/filter/lwplayout.hxx b/lotuswordpro/source/filter/lwplayout.hxx index 518da035ea14..97610408c05a 100644 --- a/lotuswordpro/source/filter/lwplayout.hxx +++ b/lotuswordpro/source/filter/lwplayout.hxx @@ -347,19 +347,11 @@ class LwpMiddleLayout : public LwpVirtualLayout public: LwpMiddleLayout( LwpObjectHeader const &objHdr, LwpSvStream* pStrm ); virtual ~LwpMiddleLayout() override; - LwpLayoutGeometry* GetGeometry() - { - if (m_bGettingGeometry) - throw std::runtime_error("recursion in layout"); - m_bGettingGeometry = true; - auto pRet = Geometry(); - m_bGettingGeometry = false; - return pRet; - } double GetGeometryHeight(); double GetGeometryWidth(); LwpBorderStuff* GetBorderStuff(); LwpBackgroundStuff* GetBackgroundStuff(); + LwpLayoutGeometry* GetGeometry(); enumXFTextDir GetTextDirection(); XFBorders* GetXFBorders(); LwpColor* GetBackColor(); @@ -405,7 +397,6 @@ protected: virtual bool IsAutoGrowDown() override; private: LwpObjectID m_BasedOnStyle; - LwpLayoutGeometry* Geometry(); protected: enum { @@ -425,6 +416,7 @@ protected: LwpObjectID m_LayBackgroundStuff; LwpObjectID m_LayExtBorderStuff; bool m_bGettingGeometry; + bool m_bGettingBackgroundStuff; public: LwpObjectID& GetContent() { return m_Content; } LwpTabOverride* GetTabOverride(); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits