summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2016-03-11 10:38:46 +0000
committerAndras Timar <andras.timar@collabora.com>2016-03-17 14:35:38 +0100
commita70c989c91979d1ec4dd3403610e3ff9f071b0c5 (patch)
tree2d7d63aedf1ec08005b4a5001a47e9bc2e79be1f
parent934171caa6a4b7a623de639f98e8c0ea34233eac (diff)
treat ExtMargins with same recurse protection as Margins
(cherry picked from commit bcecf9b13b7eee0e7c60a6827a310f8b38d13f69) Change-Id: I24640971ea6ca89878043966293492a991f01008 Reviewed-on: https://gerrit.libreoffice.org/23146 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: David Tardon <dtardon@redhat.com> (cherry picked from commit 8ff93a55256e96e1903bfc69b439238d43cabd26)
-rw-r--r--lotuswordpro/qa/cppunit/data/fail/recurse-1.lwpbin0 -> 15975 bytes
-rw-r--r--lotuswordpro/source/filter/lwplayout.cxx5
-rw-r--r--lotuswordpro/source/filter/lwplayout.hxx16
3 files changed, 16 insertions, 5 deletions
diff --git a/lotuswordpro/qa/cppunit/data/fail/recurse-1.lwp b/lotuswordpro/qa/cppunit/data/fail/recurse-1.lwp
new file mode 100644
index 000000000000..ffc7a44e346a
--- /dev/null
+++ b/lotuswordpro/qa/cppunit/data/fail/recurse-1.lwp
Binary files differ
diff --git a/lotuswordpro/source/filter/lwplayout.cxx b/lotuswordpro/source/filter/lwplayout.cxx
index de77f9c421f4..f8631da0fd38 100644
--- a/lotuswordpro/source/filter/lwplayout.cxx
+++ b/lotuswordpro/source/filter/lwplayout.cxx
@@ -83,6 +83,7 @@ LwpVirtualLayout::LwpVirtualLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm)
, m_bGettingHasProtection(false)
, m_bGettingIsProtected(false)
, m_bGettingMarginsValue(false)
+ , m_bGettingExtMarginsValue(false)
, m_nAttributes(0)
, m_nAttributes2(0)
, m_nAttributes3(0)
@@ -776,7 +777,7 @@ double LwpMiddleLayout::MarginsValue(const sal_uInt8 &nWhichSide)
* @param:
* @return:
*/
-double LwpMiddleLayout::GetExtMarginsValue(const sal_uInt8 &nWhichSide)
+double LwpMiddleLayout::ExtMarginsValue(const sal_uInt8 &nWhichSide)
{
double fValue = 0;
if(m_nOverrideFlag & OVER_MARGINS)
@@ -794,7 +795,7 @@ double LwpMiddleLayout::GetExtMarginsValue(const sal_uInt8 &nWhichSide)
fValue = pStyle->GetExtMarginsValue(nWhichSide);
return fValue;
}
- return LwpVirtualLayout::GetExtMarginsValue(nWhichSide);
+ return LwpVirtualLayout::ExtMarginsValue(nWhichSide);
}
/**
* @descr: Get the LwpBorderStuff object according to m_LayBorderStuff id.
diff --git a/lotuswordpro/source/filter/lwplayout.hxx b/lotuswordpro/source/filter/lwplayout.hxx
index ee46b3d5340d..6102b071623a 100644
--- a/lotuswordpro/source/filter/lwplayout.hxx
+++ b/lotuswordpro/source/filter/lwplayout.hxx
@@ -103,7 +103,6 @@ public:
inline virtual sal_uInt16 GetNumCols(){return 1;}
virtual double GetColWidth(sal_uInt16 nIndex);
virtual double GetColGap(sal_uInt16 nIndex);
- virtual double GetExtMarginsValue(const sal_uInt8& /*nWhichSide*/){return 0;}
virtual bool IsAutoGrow(){ return false;}
virtual bool IsAutoGrowUp(){ return false;}
virtual bool IsAutoGrowDown(){ return false;}
@@ -158,6 +157,15 @@ public:
m_bGettingMarginsValue = false;
return fRet;
}
+ double GetExtMarginsValue(const sal_uInt8& nWhichSide)
+ {
+ if (m_bGettingExtMarginsValue)
+ throw std::runtime_error("recursion in layout");
+ m_bGettingExtMarginsValue = true;
+ auto fRet = ExtMarginsValue(nWhichSide);
+ m_bGettingExtMarginsValue = false;
+ return fRet;
+ }
OUString GetStyleName(){ return m_StyleName;}
bool IsComplex();
virtual bool IsAnchorPage(){ return false;}
@@ -211,6 +219,7 @@ protected:
virtual bool HonorProtection();
virtual bool IsProtected();
virtual double MarginsValue(const sal_uInt8& /*nWhichSide*/){return 0;}
+ virtual double ExtMarginsValue(const sal_uInt8& /*nWhichSide*/){return 0;}
virtual bool MarginsSameAsParent();
protected:
bool m_bGettingHonorProtection;
@@ -218,6 +227,7 @@ protected:
bool m_bGettingHasProtection;
bool m_bGettingIsProtected;
bool m_bGettingMarginsValue;
+ bool m_bGettingExtMarginsValue;
sal_uInt32 m_nAttributes;
sal_uInt32 m_nAttributes2;
sal_uInt32 m_nAttributes3;
@@ -328,8 +338,6 @@ class LwpMiddleLayout : public LwpVirtualLayout
public:
LwpMiddleLayout( LwpObjectHeader &objHdr, LwpSvStream* pStrm );
virtual ~LwpMiddleLayout();
- virtual double MarginsValue(const sal_uInt8& nWhichSide) SAL_OVERRIDE;
- virtual double GetExtMarginsValue(const sal_uInt8& nWhichSide) SAL_OVERRIDE;
LwpLayoutGeometry* GetGeometry()
{
if (m_bGettingGeometry)
@@ -385,6 +393,8 @@ public:
protected:
void Read() SAL_OVERRIDE;
virtual bool MarginsSameAsParent() SAL_OVERRIDE;
+ virtual double MarginsValue(const sal_uInt8& nWhichSide) SAL_OVERRIDE;
+ virtual double ExtMarginsValue(const sal_uInt8& nWhichSide) SAL_OVERRIDE;
private:
LwpObjectID m_BasedOnStyle;
LwpLayoutGeometry* Geometry();