diff options
author | Caolán McNamara <caolanm@redhat.com> | 2018-03-26 17:02:46 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2018-03-26 21:27:41 +0200 |
commit | 78a43ceeca45f42d674bbf8b5c95a108ebc6590c (patch) | |
tree | 49cabf7465173cfe26db881c03c387c9e884cd40 /lotuswordpro/source | |
parent | 4869f83cc0f66455fb6774465f9afbd4d8792804 (diff) |
ofz#7146 Infinite recurse
Change-Id: I0afc3a73933e3370c5b1aeca1beabec94c56a6e6
Reviewed-on: https://gerrit.libreoffice.org/51911
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'lotuswordpro/source')
-rw-r--r-- | lotuswordpro/source/filter/lwplayout.cxx | 21 | ||||
-rw-r--r-- | lotuswordpro/source/filter/lwplayout.hxx | 1 |
2 files changed, 17 insertions, 5 deletions
diff --git a/lotuswordpro/source/filter/lwplayout.cxx b/lotuswordpro/source/filter/lwplayout.cxx index 7931f7b0dee4..166320b0c565 100644 --- a/lotuswordpro/source/filter/lwplayout.cxx +++ b/lotuswordpro/source/filter/lwplayout.cxx @@ -83,6 +83,7 @@ LwpVirtualLayout::LwpVirtualLayout(LwpObjectHeader const &objHdr, LwpSvStream* p , m_bGettingMarginsValue(false) , m_bGettingExtMarginsValue(false) , m_bGettingUsePrinterSettings(false) + , m_bGettingScaleCenter(false) , m_bGettingUseWhen(false) , m_bGettingStyleLayout(false) , m_nAttributes(0) @@ -953,16 +954,26 @@ sal_uInt16 LwpMiddleLayout::GetScaleTile() sal_uInt16 LwpMiddleLayout::GetScaleCenter() { + if (m_bGettingScaleCenter) + throw std::runtime_error("recursion in layout"); + m_bGettingScaleCenter = true; + + sal_uInt16 nRet = 0; + if ((m_nOverrideFlag & OVER_SCALING) && m_LayScale.obj().is() && GetLayoutScale()) { - return (GetLayoutScale()->GetPlacement() & LwpLayoutScale::CENTERED) + nRet = (GetLayoutScale()->GetPlacement() & LwpLayoutScale::CENTERED) ? 1 : 0; } - rtl::Reference<LwpObject> xBase(GetBasedOnStyle()); - if (xBase.is()) - return dynamic_cast<LwpMiddleLayout&>(*xBase.get()).GetScaleCenter(); else - return 0; + { + rtl::Reference<LwpObject> xBase(GetBasedOnStyle()); + if (xBase.is()) + nRet = dynamic_cast<LwpMiddleLayout&>(*xBase.get()).GetScaleCenter(); + } + + m_bGettingScaleCenter = false; + return nRet; } bool LwpMiddleLayout::CanSizeRight() diff --git a/lotuswordpro/source/filter/lwplayout.hxx b/lotuswordpro/source/filter/lwplayout.hxx index a1e9db694e29..b3685f587945 100644 --- a/lotuswordpro/source/filter/lwplayout.hxx +++ b/lotuswordpro/source/filter/lwplayout.hxx @@ -237,6 +237,7 @@ protected: bool m_bGettingMarginsValue; bool m_bGettingExtMarginsValue; bool m_bGettingUsePrinterSettings; + bool m_bGettingScaleCenter; bool m_bGettingUseWhen; bool m_bGettingStyleLayout; sal_uInt32 m_nAttributes; |