[Libreoffice-commits] core.git: Branch 'libreoffice-5-4' - 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 e2075593e4d13b6e7c0b32b23912fdeed1ada6bf
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/39920
Reviewed-by: Michael Stahl <mstahl at redhat.com>
Tested-by: Michael Stahl <mstahl at redhat.com>
diff --git a/svgio/inc/svgusenode.hxx b/svgio/inc/svgusenode.hxx
index 05c0063699c5..7a438c11e960 100644
--- a/svgio/inc/svgusenode.hxx
+++ b/svgio/inc/svgusenode.hxx
@@ -45,6 +45,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 104eb727bfed..86692d91c3d7 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)
{
}
@@ -142,7 +143,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;
@@ -150,9 +151,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