summaryrefslogtreecommitdiff
path: root/src/svg/qsvghandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/svg/qsvghandler.cpp')
-rw-r--r--src/svg/qsvghandler.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/svg/qsvghandler.cpp b/src/svg/qsvghandler.cpp
index ccf0ae6..472b65a 100644
--- a/src/svg/qsvghandler.cpp
+++ b/src/svg/qsvghandler.cpp
@@ -3861,16 +3861,17 @@ bool QSvgHandler::endElement(const QStringRef &localName)
return true;
}
-void QSvgHandler::resolveGradients(QSvgNode *node)
+void QSvgHandler::resolveGradients(QSvgNode *node, int nestedDepth)
{
if (!node || (node->type() != QSvgNode::DOC && node->type() != QSvgNode::G
&& node->type() != QSvgNode::DEFS && node->type() != QSvgNode::SWITCH)) {
return;
}
+
QSvgStructureNode *structureNode = static_cast<QSvgStructureNode *>(node);
- QList<QSvgNode *> ren = structureNode->renderers();
- for (QList<QSvgNode *>::iterator it = ren.begin(); it != ren.end(); ++it) {
+ const QList<QSvgNode *> ren = structureNode->renderers();
+ for (auto it = ren.begin(); it != ren.end(); ++it) {
QSvgFillStyle *fill = static_cast<QSvgFillStyle *>((*it)->styleProperty(QSvgStyleProperty::FILL));
if (fill && !fill->isGradientResolved()) {
QString id = fill->gradientId();
@@ -3895,7 +3896,8 @@ void QSvgHandler::resolveGradients(QSvgNode *node)
}
}
- resolveGradients(*it);
+ if (nestedDepth < 2048)
+ resolveGradients(*it, nestedDepth + 1);
}
}