summaryrefslogtreecommitdiff
path: root/lotuswordpro
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2015-12-28 14:43:50 +0000
committerAndras Timar <andras.timar@collabora.com>2016-01-04 12:20:43 +0100
commit176802fa72c9952b1ea7ea632cfcaa198b9c0290 (patch)
treeff62e9c3f61dd3fe0c502dc9408014b0984f371d /lotuswordpro
parent733974d3d2b85ae094bbe9a810e6a87008781962 (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.cxx11
-rw-r--r--lotuswordpro/source/filter/lwplayout.hxx12
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();