svg_loader: free allocated data properly.

also renamed internal function for consistency.

createNode()
cloneNode()
freeSVGNode() ?

Change-Id: Ie9b22e92d5e918e947f8476ad0d4682fc7a3be65
This commit is contained in:
Hermet Park 2020-08-13 19:41:34 +09:00
parent 8abef404cf
commit 3b9bb51321

View file

@ -33,7 +33,7 @@
typedef SvgNode* (*FactoryMethod)(SvgLoaderData* loader, SvgNode* parent, const char* buf, unsigned bufLength); typedef SvgNode* (*FactoryMethod)(SvgLoaderData* loader, SvgNode* parent, const char* buf, unsigned bufLength);
typedef SvgStyleGradient* (*GradientFactoryMethod)(SvgLoaderData* loader, const char* buf, unsigned bufLength); typedef SvgStyleGradient* (*GradientFactoryMethod)(SvgLoaderData* loader, const char* buf, unsigned bufLength);
static void _freeNode(SvgNode* node);
static char* _skipSpace(const char* str, const char* end) static char* _skipSpace(const char* str, const char* end)
{ {
@ -1459,6 +1459,8 @@ static void _cloneNode(SvgNode* from, SvgNode* parent)
for (vector<SvgNode*>::iterator itrChild = from->child.begin(); itrChild != from->child.end(); itrChild++) { for (vector<SvgNode*>::iterator itrChild = from->child.begin(); itrChild != from->child.end(); itrChild++) {
_cloneNode(*itrChild, newNode); _cloneNode(*itrChild, newNode);
} }
_freeNode(newNode);
} }
@ -2161,12 +2163,12 @@ static void _freeNodeStyle(SvgStyleProperty* style)
free(style); free(style);
} }
static void _freeSvgNode(SvgNode* node) static void _freeNode(SvgNode* node)
{ {
if (!node) return; if (!node) return;
for(vector<SvgNode*>::iterator itrChild = node->child.begin(); itrChild != node->child.end(); itrChild++) { for(vector<SvgNode*>::iterator itrChild = node->child.begin(); itrChild != node->child.end(); itrChild++) {
_freeSvgNode(*itrChild); _freeNode(*itrChild);
} }
node->child.clear(); node->child.clear();
@ -2187,7 +2189,7 @@ static void _freeSvgNode(SvgNode* node)
break; break;
} }
case SvgNodeType::Doc: { case SvgNodeType::Doc: {
_freeSvgNode(node->node.doc.defs); _freeNode(node->node.doc.defs);
break; break;
} }
case SvgNodeType::Defs: { case SvgNodeType::Defs: {
@ -2360,7 +2362,7 @@ bool SvgLoader::close()
free(loaderData.svgParse); free(loaderData.svgParse);
loaderData.svgParse = nullptr; loaderData.svgParse = nullptr;
} }
_freeSvgNode(loaderData.doc); _freeNode(loaderData.doc);
loaderData.doc = nullptr; loaderData.doc = nullptr;
return true; return true;