lotuswordpro/source/filter/lwplayout.cxx | 16 +++++++++++----- lotuswordpro/source/filter/lwplayout.hxx | 1 + 2 files changed, 12 insertions(+), 5 deletions(-)
New commits: commit b181d66c350416fed0a284b9d8db9c02a25c8dc5 Author: Caolán McNamara <caol...@redhat.com> Date: Tue Dec 19 09:18:54 2017 +0000 ofz#4689 avoid recurse to death Change-Id: Ie578a767cd8646c4e67c302a67b46ce1f1637122 Reviewed-on: https://gerrit.libreoffice.org/46772 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Caolán McNamara <caol...@redhat.com> Tested-by: Caolán McNamara <caol...@redhat.com> diff --git a/lotuswordpro/source/filter/lwplayout.cxx b/lotuswordpro/source/filter/lwplayout.cxx index b746a2d94c1e..33301a77ab26 100644 --- a/lotuswordpro/source/filter/lwplayout.cxx +++ b/lotuswordpro/source/filter/lwplayout.cxx @@ -1916,6 +1916,7 @@ rtl::Reference<LwpVirtualLayout> LwpLayout::GetContainerLayout() LwpPlacableLayout::LwpPlacableLayout( LwpObjectHeader const &objHdr, LwpSvStream* pStrm ) : LwpLayout(objHdr, pStrm) , m_bGettingWrapType(false) + , m_bGettingLayoutRelativity(false) , m_nWrapType(0) , m_nBuoyancy(0) , m_nBaseLineOffset(0) @@ -1995,11 +1996,15 @@ sal_uInt8 LwpPlacableLayout::GetWrapType() */ LwpLayoutRelativity* LwpPlacableLayout::GetRelativityPiece() { - if(!m_LayRelativity.IsNull()) + if (m_bGettingLayoutRelativity) + throw std::runtime_error("recursion in layout"); + m_bGettingLayoutRelativity = true; + LwpLayoutRelativity* pRet = nullptr; + if (!m_LayRelativity.IsNull()) { - if(m_nOverrideFlag & OVER_PLACEMENT) + if (m_nOverrideFlag & OVER_PLACEMENT) { - return dynamic_cast<LwpLayoutRelativity*>(m_LayRelativity.obj().get()); + pRet = dynamic_cast<LwpLayoutRelativity*>(m_LayRelativity.obj().get()); } } else @@ -2007,10 +2012,11 @@ LwpLayoutRelativity* LwpPlacableLayout::GetRelativityPiece() rtl::Reference<LwpObject> xBase(GetBasedOnStyle()); if (LwpPlacableLayout* pLay = dynamic_cast<LwpPlacableLayout*>(xBase.get())) { - return pLay->GetRelativityPiece(); + pRet = pLay->GetRelativityPiece(); } } - return nullptr; + m_bGettingLayoutRelativity = false; + return pRet; } /** * @descr: Get relative type diff --git a/lotuswordpro/source/filter/lwplayout.hxx b/lotuswordpro/source/filter/lwplayout.hxx index 387d68488fd5..3c900b4d8a6d 100644 --- a/lotuswordpro/source/filter/lwplayout.hxx +++ b/lotuswordpro/source/filter/lwplayout.hxx @@ -494,6 +494,7 @@ protected: void Read() override; protected: bool m_bGettingWrapType; + bool m_bGettingLayoutRelativity; sal_uInt8 m_nWrapType; sal_uInt8 m_nBuoyancy; sal_Int32 m_nBaseLineOffset;
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits