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 ...@@ -56,6 +56,7 @@ namespace svgio
/// link to another gradient used as style. If maXLink /// link to another gradient used as style. If maXLink
/// is set, the node can be fetched on demand by using /// is set, the node can be fetched on demand by using
// tryToFindLink (buffered) // tryToFindLink (buffered)
mutable bool mbResolvingLink; // protect against infinite link recursion
OUString maXLink; OUString maXLink;
const SvgGradientNode* mpXLink; const SvgGradientNode* mpXLink;
......
...@@ -51,6 +51,7 @@ namespace svgio ...@@ -51,6 +51,7 @@ namespace svgio
maGradientUnits(objectBoundingBox), maGradientUnits(objectBoundingBox),
maSpreadMethod(drawinglayer::primitive2d::SpreadMethod::Pad), maSpreadMethod(drawinglayer::primitive2d::SpreadMethod::Pad),
mpaGradientTransform(nullptr), mpaGradientTransform(nullptr),
mbResolvingLink(false),
maXLink(), maXLink(),
mpXLink(nullptr) mpXLink(nullptr)
{ {
...@@ -246,9 +247,11 @@ namespace svgio ...@@ -246,9 +247,11 @@ namespace svgio
{ {
const_cast< SvgGradientNode* >(this)->tryToFindLink(); const_cast< SvgGradientNode* >(this)->tryToFindLink();
if(mpXLink) if (mpXLink && !mbResolvingLink)
{ {
mbResolvingLink = true;
mpXLink->collectGradientEntries(aVector); mpXLink->collectGradientEntries(aVector);
mbResolvingLink = false;
} }
} }
else else
...@@ -312,9 +315,12 @@ namespace svgio ...@@ -312,9 +315,12 @@ namespace svgio
const_cast< SvgGradientNode* >(this)->tryToFindLink(); 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% // default is 0%
...@@ -330,9 +336,12 @@ namespace svgio ...@@ -330,9 +336,12 @@ namespace svgio
const_cast< SvgGradientNode* >(this)->tryToFindLink(); 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% // default is 0%
...@@ -348,9 +357,12 @@ namespace svgio ...@@ -348,9 +357,12 @@ namespace svgio
const_cast< SvgGradientNode* >(this)->tryToFindLink(); 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% // default is 100%
...@@ -366,9 +378,12 @@ namespace svgio ...@@ -366,9 +378,12 @@ namespace svgio
const_cast< SvgGradientNode* >(this)->tryToFindLink(); 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% // default is 0%
...@@ -384,9 +399,12 @@ namespace svgio ...@@ -384,9 +399,12 @@ namespace svgio
const_cast< SvgGradientNode* >(this)->tryToFindLink(); 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% // default is 50%
...@@ -402,9 +420,12 @@ namespace svgio ...@@ -402,9 +420,12 @@ namespace svgio
const_cast< SvgGradientNode* >(this)->tryToFindLink(); 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% // default is 50%
...@@ -420,9 +441,12 @@ namespace svgio ...@@ -420,9 +441,12 @@ namespace svgio
const_cast< SvgGradientNode* >(this)->tryToFindLink(); 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% // default is 50%
...@@ -438,9 +462,12 @@ namespace svgio ...@@ -438,9 +462,12 @@ namespace svgio
const_cast< SvgGradientNode* >(this)->tryToFindLink(); 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; return nullptr;
...@@ -455,9 +482,12 @@ namespace svgio ...@@ -455,9 +482,12 @@ namespace svgio
const_cast< SvgGradientNode* >(this)->tryToFindLink(); 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; return nullptr;
...@@ -472,9 +502,12 @@ namespace svgio ...@@ -472,9 +502,12 @@ namespace svgio
const_cast< SvgGradientNode* >(this)->tryToFindLink(); 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; 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