[Libreoffice-commits] core.git: Branch 'libreoffice-5-3' - svgio/inc svgio/source

Caolán McNamara caolanm at redhat.com
Thu Jul 13 20:35:52 UTC 2017


 svgio/inc/svgusenode.hxx              |    2 ++
 svgio/source/svgreader/svgusenode.cxx |    7 +++++--
 2 files changed, 7 insertions(+), 2 deletions(-)

New commits:
commit 2f64f2871d4e4091061d791db647de57ed390109
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Thu Jul 13 16:23:32 2017 +0100

    Resolves: tdf#108903 avoid recurse to death
    
    Change-Id: Iadde719a024c5fce97aa0f4c58947a5012639a84
    Reviewed-on: https://gerrit.libreoffice.org/39921
    Reviewed-by: Michael Stahl <mstahl at redhat.com>
    Tested-by: Jenkins <ci at libreoffice.org>

diff --git a/svgio/inc/svgusenode.hxx b/svgio/inc/svgusenode.hxx
index a6eccaa05cd0..26c915b6ee2a 100644
--- a/svgio/inc/svgusenode.hxx
+++ b/svgio/inc/svgusenode.hxx
@@ -43,6 +43,8 @@ namespace svgio
             /// link to content. If maXLink is set, the node can be fetched
             // on demand
             OUString               maXLink;
+            /// detect if maXLink causes a loop to ourself during decomposing
+            mutable bool           mbDecomposingSvgNode;
 
         public:
             SvgUseNode(
diff --git a/svgio/source/svgreader/svgusenode.cxx b/svgio/source/svgreader/svgusenode.cxx
index 7495c2b1d5ad..7fdae9b3f68a 100644
--- a/svgio/source/svgreader/svgusenode.cxx
+++ b/svgio/source/svgreader/svgusenode.cxx
@@ -35,7 +35,8 @@ namespace svgio
             maY(),
             maWidth(),
             maHeight(),
-            maXLink()
+            maXLink(),
+            mbDecomposingSvgNode(false)
         {
         }
 
@@ -143,7 +144,7 @@ namespace svgio
             // try to access link to content
             const SvgNode* pXLink = getDocument().findSvgNodeById(maXLink);
 
-            if(pXLink && Display_none != pXLink->getDisplay())
+            if (pXLink && Display_none != pXLink->getDisplay() && !mbDecomposingSvgNode)
             {
                 // decompose children
                 drawinglayer::primitive2d::Primitive2DContainer aNewTarget;
@@ -151,9 +152,11 @@ namespace svgio
                 // todo: in case mpXLink is a SVGTokenSvg or SVGTokenSymbol the
                 // SVG docs want the getWidth() and getHeight() from this node
                 // to be valid for the subtree.
+                mbDecomposingSvgNode = true;
                 const_cast< SvgNode* >(pXLink)->setAlternativeParent(this);
                 pXLink->decomposeSvgNode(aNewTarget, true);
                 const_cast< SvgNode* >(pXLink)->setAlternativeParent();
+                mbDecomposingSvgNode = false;
 
                 if(!aNewTarget.empty())
                 {


More information about the Libreoffice-commits mailing list