[Libreoffice-commits] core.git: lotuswordpro/source

Caolán McNamara caolanm at redhat.com
Mon Mar 26 19:28:09 UTC 2018


 lotuswordpro/source/filter/lwplayout.cxx |   21 ++++++++++++++++-----
 lotuswordpro/source/filter/lwplayout.hxx |    1 +
 2 files changed, 17 insertions(+), 5 deletions(-)

New commits:
commit 78a43ceeca45f42d674bbf8b5c95a108ebc6590c
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Mon Mar 26 17:02:46 2018 +0100

    ofz#7146 Infinite recurse
    
    Change-Id: I0afc3a73933e3370c5b1aeca1beabec94c56a6e6
    Reviewed-on: https://gerrit.libreoffice.org/51911
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

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;


More information about the Libreoffice-commits mailing list