diff options
author | Caolán McNamara <caolanm@redhat.com> | 2015-12-28 14:43:50 +0000 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2016-01-04 12:20:43 +0100 |
commit | 176802fa72c9952b1ea7ea632cfcaa198b9c0290 (patch) | |
tree | ff62e9c3f61dd3fe0c502dc9408014b0984f371d /lotuswordpro | |
parent | 733974d3d2b85ae094bbe9a810e6a87008781962 (diff) |
guard against infinite recursion in GetGeometry
(cherry picked from commit 9ec011f6874cf663db54d0420c41d9299e4ed882)
(cherry picked from commit 02c113a3ab57d7880bb1f794e192fb42aea078e1)
Change-Id: I901f77f5846512cb528f2e14bbc50409fa29bef2
Reviewed-on: https://gerrit.libreoffice.org/20988
Reviewed-by: David Tardon <dtardon@redhat.com>
Tested-by: David Tardon <dtardon@redhat.com>
(cherry picked from commit ab8c84b1b1d14adc0cabbc063ba8a5132a540201)
Diffstat (limited to 'lotuswordpro')
-rw-r--r-- | lotuswordpro/source/filter/lwplayout.cxx | 11 | ||||
-rw-r--r-- | lotuswordpro/source/filter/lwplayout.hxx | 12 |
2 files changed, 18 insertions, 5 deletions
diff --git a/lotuswordpro/source/filter/lwplayout.cxx b/lotuswordpro/source/filter/lwplayout.cxx index a0d3a5101ed3..53e126105955 100644 --- a/lotuswordpro/source/filter/lwplayout.cxx +++ b/lotuswordpro/source/filter/lwplayout.cxx @@ -585,9 +585,12 @@ void LwpLayoutMisc::Read(LwpObjectStream* pStrm) } LwpMiddleLayout::LwpMiddleLayout( LwpObjectHeader &objHdr, LwpSvStream* pStrm ) - : LwpVirtualLayout(objHdr, pStrm), - m_pStyleStuff(new LwpLayoutStyle), m_pMiscStuff(new LwpLayoutMisc) -{} + : LwpVirtualLayout(objHdr, pStrm) + , m_pStyleStuff(new LwpLayoutStyle) + , m_pMiscStuff(new LwpLayoutMisc) + , m_bGettingGeometry(false) +{ +} LwpMiddleLayout::~LwpMiddleLayout() { @@ -663,7 +666,7 @@ rtl::Reference<LwpObject> LwpMiddleLayout::GetBasedOnStyle() * @descr: Get the geometry of current layout * */ -LwpLayoutGeometry* LwpMiddleLayout::GetGeometry() +LwpLayoutGeometry* LwpMiddleLayout::Geometry() { if( !m_LayGeometry.IsNull() ) { diff --git a/lotuswordpro/source/filter/lwplayout.hxx b/lotuswordpro/source/filter/lwplayout.hxx index 749513bc7b23..f540aecd280b 100644 --- a/lotuswordpro/source/filter/lwplayout.hxx +++ b/lotuswordpro/source/filter/lwplayout.hxx @@ -321,7 +321,15 @@ public: virtual bool MarginsSameAsParent() SAL_OVERRIDE; virtual double MarginsValue(const sal_uInt8& nWhichSide) SAL_OVERRIDE; virtual double GetExtMarginsValue(const sal_uInt8& nWhichSide) SAL_OVERRIDE; - LwpLayoutGeometry* GetGeometry(); + 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(); @@ -369,6 +377,7 @@ protected: void Read() SAL_OVERRIDE; private: LwpObjectID m_BasedOnStyle; + LwpLayoutGeometry* Geometry(); protected: enum { @@ -387,6 +396,7 @@ protected: LwpObjectID m_LayBorderStuff; LwpObjectID m_LayBackgroundStuff; LwpObjectID m_LayExtBorderStuff; + bool m_bGettingGeometry; public: LwpObjectID& GetContent() { return m_Content; } LwpTabOverride* GetTabOverride(); |