Kaydet (Commit) f35e3b36 authored tarafından Caolán McNamara's avatar Caolán McNamara

crashtesting: infinite recurse on moz330387-6.svg

Change-Id: I3c39d49504a4651b92f41c07e4cef8887366dc2b
Reviewed-on: https://gerrit.libreoffice.org/57626
Tested-by: Jenkins
Reviewed-by: 's avatarCaolán McNamara <caolanm@redhat.com>
Tested-by: 's avatarCaolán McNamara <caolanm@redhat.com>
üst 0197a2ca
......@@ -56,6 +56,7 @@ namespace svgio
/// link to another gradient used as style. If maXLink
/// is set, the node can be fetched on demand by using
// tryToFindLink (buffered)
mutable bool mbResolvingLink; // protect against infinite link recursion
OUString maXLink;
const SvgGradientNode* mpXLink;
......
......@@ -51,6 +51,7 @@ namespace svgio
maGradientUnits(objectBoundingBox),
maSpreadMethod(drawinglayer::primitive2d::SpreadMethod::Pad),
mpaGradientTransform(nullptr),
mbResolvingLink(false),
maXLink(),
mpXLink(nullptr)
{
......@@ -246,9 +247,11 @@ namespace svgio
{
const_cast< SvgGradientNode* >(this)->tryToFindLink();
if(mpXLink)
if (mpXLink && !mbResolvingLink)
{
mbResolvingLink = true;
mpXLink->collectGradientEntries(aVector);
mbResolvingLink = false;
}
}
else
......@@ -312,9 +315,12 @@ namespace svgio
const_cast< SvgGradientNode* >(this)->tryToFindLink();
if(mpXLink)
if (mpXLink && !mbResolvingLink)
{
return mpXLink->getX1();
mbResolvingLink = true;
auto ret = mpXLink->getX1();
mbResolvingLink = false;
return ret;
}
// default is 0%
......@@ -330,9 +336,12 @@ namespace svgio
const_cast< SvgGradientNode* >(this)->tryToFindLink();
if(mpXLink)
if (mpXLink && !mbResolvingLink)
{
return mpXLink->getY1();
mbResolvingLink = true;
auto ret = mpXLink->getY1();
mbResolvingLink = false;
return ret;
}
// default is 0%
......@@ -348,9 +357,12 @@ namespace svgio
const_cast< SvgGradientNode* >(this)->tryToFindLink();
if(mpXLink)
if (mpXLink && !mbResolvingLink)
{
return mpXLink->getX2();
mbResolvingLink = true;
auto ret = mpXLink->getX2();
mbResolvingLink = false;
return ret;
}
// default is 100%
......@@ -366,9 +378,12 @@ namespace svgio
const_cast< SvgGradientNode* >(this)->tryToFindLink();
if(mpXLink)
if (mpXLink && !mbResolvingLink)
{
return mpXLink->getY2();
mbResolvingLink = true;
auto ret = mpXLink->getY2();
mbResolvingLink = false;
return ret;
}
// default is 0%
......@@ -384,9 +399,12 @@ namespace svgio
const_cast< SvgGradientNode* >(this)->tryToFindLink();
if(mpXLink)
if (mpXLink && !mbResolvingLink)
{
return mpXLink->getCx();
mbResolvingLink = true;
auto ret = mpXLink->getCx();
mbResolvingLink = false;
return ret;
}
// default is 50%
......@@ -402,9 +420,12 @@ namespace svgio
const_cast< SvgGradientNode* >(this)->tryToFindLink();
if(mpXLink)
if (mpXLink && !mbResolvingLink)
{
return mpXLink->getCy();
mbResolvingLink = true;
auto ret = mpXLink->getCy();
mbResolvingLink = false;
return ret;
}
// default is 50%
......@@ -420,9 +441,12 @@ namespace svgio
const_cast< SvgGradientNode* >(this)->tryToFindLink();
if(mpXLink)
if (mpXLink && !mbResolvingLink)
{
return mpXLink->getR();
mbResolvingLink = true;
auto ret = mpXLink->getR();
mbResolvingLink = false;
return ret;
}
// default is 50%
......@@ -438,9 +462,12 @@ namespace svgio
const_cast< SvgGradientNode* >(this)->tryToFindLink();
if(mpXLink)
if (mpXLink && !mbResolvingLink)
{
return mpXLink->getFx();
mbResolvingLink = true;
auto ret = mpXLink->getFx();
mbResolvingLink = false;
return ret;
}
return nullptr;
......@@ -455,9 +482,12 @@ namespace svgio
const_cast< SvgGradientNode* >(this)->tryToFindLink();
if(mpXLink)
if (mpXLink && !mbResolvingLink)
{
return mpXLink->getFy();
mbResolvingLink = true;
auto ret = mpXLink->getFy();
mbResolvingLink = false;
return ret;
}
return nullptr;
......@@ -472,9 +502,12 @@ namespace svgio
const_cast< SvgGradientNode* >(this)->tryToFindLink();
if(mpXLink)
if (mpXLink && !mbResolvingLink)
{
return mpXLink->getGradientTransform();
mbResolvingLink = true;
auto ret = mpXLink->getGradientTransform();
mbResolvingLink = false;
return ret;
}
return nullptr;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment