summaryrefslogtreecommitdiff
path: root/svgio/source/svgreader/svgnode.cxx
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2018-07-23 21:30:05 +0100
committerCaolán McNamara <caolanm@redhat.com>2018-07-24 09:32:08 +0200
commit20bb79886de5b7e24b6796aaa9811153abda86c9 (patch)
tree6f40aee21ba2d88f098bbd5988a96baefbd2ce3e /svgio/source/svgreader/svgnode.cxx
parentf5930a2235b8a51b30b4ecf1640bf9a56adffe6b (diff)
crashtesting: infinite recurse with moz384637-1.svg
Change-Id: Ia4bbc9d471c63812dc3ef490f32e8490bda72bfe Reviewed-on: https://gerrit.libreoffice.org/57888 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'svgio/source/svgreader/svgnode.cxx')
-rw-r--r--svgio/source/svgreader/svgnode.cxx7
1 files changed, 7 insertions, 0 deletions
diff --git a/svgio/source/svgreader/svgnode.cxx b/svgio/source/svgreader/svgnode.cxx
index f6395a24527d..56389ef14124 100644
--- a/svgio/source/svgreader/svgnode.cxx
+++ b/svgio/source/svgreader/svgnode.cxx
@@ -267,6 +267,7 @@ namespace svgio
maDisplay(Display_inline),
maCssStyleVector(),
mpLocalCssStyle(nullptr),
+ mbDecomposing(false),
mbCssStyleVectorBuilt(false)
{
OSL_ENSURE(SVGTokenUnknown != maType, "SvgNode with unknown type created (!)");
@@ -464,6 +465,9 @@ namespace svgio
void SvgNode::decomposeSvgNode(drawinglayer::primitive2d::Primitive2DContainer& rTarget, bool bReferenced) const
{
+ if (mbDecomposing) //guard against infinite recurse
+ return;
+
if(Display_none == getDisplay())
{
return;
@@ -499,6 +503,8 @@ namespace svgio
if(!rChildren.empty())
{
+ mbDecomposing = true;
+
const sal_uInt32 nCount(rChildren.size());
for(sal_uInt32 a(0); a < nCount; a++)
@@ -571,6 +577,7 @@ namespace svgio
}
}
}
+ mbDecomposing = false;
}
}