summaryrefslogtreecommitdiff
path: root/lotuswordpro
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2018-07-27 08:58:56 +0100
committerAndras Timar <andras.timar@collabora.com>2018-08-10 10:56:58 +0200
commit8b23e372cdecb642e6bed937e0dbe1fa8d2d030b (patch)
tree12b282a32ca00cf55705a67532efae8c4f332352 /lotuswordpro
parent23325908c592bf8db74ad44f1f456e5ff5c794c8 (diff)
ofz#9603 infinite recursion
Change-Id: Ia4d0e3c1bb12330bd2f754e663055e1218da926f Reviewed-on: https://gerrit.libreoffice.org/58179 Tested-by: Jenkins Reviewed-by: Michael Stahl <Michael.Stahl@cib.de> (cherry picked from commit 089b7c342b5e64f45bf279d37b7261cca5c25d32)
Diffstat (limited to 'lotuswordpro')
-rw-r--r--lotuswordpro/source/filter/lwplayout.cxx31
-rw-r--r--lotuswordpro/source/filter/lwplayout.hxx12
2 files changed, 26 insertions, 17 deletions
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();