svgio/inc/svgusenode.hxx | 2 ++ svgio/source/svgreader/svgusenode.cxx | 7 +++++-- 2 files changed, 7 insertions(+), 2 deletions(-)
New commits: commit 304b16c3bf6fba2fa28e723d1cb58157201b5c1f Author: Caolán McNamara <caol...@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/39918 Reviewed-by: Caolán McNamara <caol...@redhat.com> Tested-by: Caolán McNamara <caol...@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..bcde39f53e4a 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 = true; if(!aNewTarget.empty()) {
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits