From 3086f28b5580e088c60e77be0faffb4b35e5b145 Mon Sep 17 00:00:00 2001 From: Michal Maciola <71131832+mmaciola@users.noreply.github.com> Date: Wed, 30 Jun 2021 10:21:30 +0200 Subject: [PATCH] svg_loader: allow multiple tags without data and memory leak (#528) * svg_loader: allow multiple defs without data and memory leak If the svg file contained multiple tags, each subsequent tag overwritten the previous tag. This resulted in incorrect rendering of the file and memory leaks. @Issues: 491 * svg_loader: allow multiple defs without data and memory leak- fix #1 Changed the idea to abandon node creating instead of deleting it after creation. Removed simpleXmlParseAttributes for _createDefsNode. --- src/loaders/svg/tvgSvgLoader.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/loaders/svg/tvgSvgLoader.cpp b/src/loaders/svg/tvgSvgLoader.cpp index cb1262c2..b21f01b4 100644 --- a/src/loaders/svg/tvgSvgLoader.cpp +++ b/src/loaders/svg/tvgSvgLoader.cpp @@ -1068,9 +1068,8 @@ static SvgNode* _createNode(SvgNode* parent, SvgNodeType type) static SvgNode* _createDefsNode(TVG_UNUSED SvgLoaderData* loader, TVG_UNUSED SvgNode* parent, const char* buf, unsigned bufLength) { + if (loader->def && loader->doc->node.doc.defs) return nullptr; SvgNode* node = _createNode(nullptr, SvgNodeType::Defs); - if (!node) return nullptr; - simpleXmlParseAttributes(buf, bufLength, nullptr, node); return node; } @@ -2199,6 +2198,7 @@ static void _svgLoaderParserXmlOpen(SvgLoaderData* loader, const char* content, node = method(loader, parent, attrs, attrsLength); } + if (!node) return; if (node->type == SvgNodeType::Defs) { loader->doc->node.doc.defs = node; loader->def = node;