From 5429c2f26c79af4894aca75de96864d14f091d7e 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. Change-Id: Iada1c467949228e116a637c8fd37ceabb5dc34bb --- 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 cb1262c..b21f01b 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; -- 2.7.4