summaryrefslogtreecommitdiff
path: root/lotuswordpro
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2017-12-19 09:18:54 +0000
committerCaolán McNamara <caolanm@redhat.com>2017-12-19 21:36:40 +0100
commitb181d66c350416fed0a284b9d8db9c02a25c8dc5 (patch)
tree561774baf17ca396287abe20f0592b69bc781c2c /lotuswordpro
parentfdbd3ac1880b3943e2cff48ecfb95dd088210d09 (diff)
ofz#4689 avoid recurse to death
Change-Id: Ie578a767cd8646c4e67c302a67b46ce1f1637122 Reviewed-on: https://gerrit.libreoffice.org/46772 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'lotuswordpro')
-rw-r--r--lotuswordpro/source/filter/lwplayout.cxx16
-rw-r--r--lotuswordpro/source/filter/lwplayout.hxx1
2 files changed, 12 insertions, 5 deletions
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;