mirror of
https://github.com/thorvg/thorvg.git
synced 2025-06-14 12:04:29 +00:00
svg_loader: buflen arg used in the simpleXmlParseW3CAttribute()
While parsing the css internal style sheets the buflen has to be passed.
This commit is contained in:
parent
c351391bd5
commit
482add35e9
3 changed files with 20 additions and 20 deletions
|
@ -798,7 +798,7 @@ static bool _attrParseSvgNode(void* data, const char* key, const char* value)
|
||||||
} else if (!strcmp(key, "preserveAspectRatio")) {
|
} else if (!strcmp(key, "preserveAspectRatio")) {
|
||||||
if (!strcmp(value, "none")) doc->preserveAspect = false;
|
if (!strcmp(value, "none")) doc->preserveAspect = false;
|
||||||
} else if (!strcmp(key, "style")) {
|
} else if (!strcmp(key, "style")) {
|
||||||
return simpleXmlParseW3CAttribute(value, 0, _parseStyleAttr, loader);
|
return simpleXmlParseW3CAttribute(value, strlen(value), _parseStyleAttr, loader);
|
||||||
}
|
}
|
||||||
#ifdef THORVG_LOG_ENABLED
|
#ifdef THORVG_LOG_ENABLED
|
||||||
else if ((!strcmp(key, "x") || !strcmp(key, "y")) && fabsf(svgUtilStrtof(value, nullptr)) > FLT_EPSILON) {
|
else if ((!strcmp(key, "x") || !strcmp(key, "y")) && fabsf(svgUtilStrtof(value, nullptr)) > FLT_EPSILON) {
|
||||||
|
@ -951,13 +951,13 @@ static void _handleDisplayAttr(TVG_UNUSED SvgLoaderData* loader, SvgNode* node,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static SvgNode* _findCssStyleNode(const SvgNode* cssStyle, const char* title)
|
static SvgNode* _findCssStyleNode(const SvgNode* cssStyle, const char* title, SvgNodeType type)
|
||||||
{
|
{
|
||||||
if (!cssStyle) return nullptr;
|
if (!cssStyle) return nullptr;
|
||||||
|
|
||||||
auto child = cssStyle->child.data;
|
auto child = cssStyle->child.data;
|
||||||
for (uint32_t i = 0; i < cssStyle->child.count; ++i, ++child) {
|
for (uint32_t i = 0; i < cssStyle->child.count; ++i, ++child) {
|
||||||
if (((*child)->id) && !strcmp((*child)->id, title)) return (*child);
|
if ((*child)->type == type && ((*child)->id) && !strcmp((*child)->id, title)) return (*child);
|
||||||
}
|
}
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
|
@ -973,8 +973,8 @@ static void _handleCssClassAttr(SvgLoaderData* loader, SvgNode* node, const char
|
||||||
*cssClass = _copyId(value);
|
*cssClass = _copyId(value);
|
||||||
|
|
||||||
//TODO: works only if style was defined before it is used
|
//TODO: works only if style was defined before it is used
|
||||||
if (auto cssNode = _findCssStyleNode(loader->cssStyle, *cssClass)) {
|
if (auto cssNode = _findCssStyleNode(loader->cssStyle, *cssClass, node->type)) {
|
||||||
//TODO: check SVG2 stndard - should the geometric properties be copied?
|
//TODO: check SVG2 standard - should the geometric properties be copied?
|
||||||
_copyAttr(node, cssNode, false);
|
_copyAttr(node, cssNode, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1054,7 +1054,7 @@ static bool _attrParseGNode(void* data, const char* key, const char* value)
|
||||||
SvgNode* node = loader->svgParse->node;
|
SvgNode* node = loader->svgParse->node;
|
||||||
|
|
||||||
if (!strcmp(key, "style")) {
|
if (!strcmp(key, "style")) {
|
||||||
return simpleXmlParseW3CAttribute(value, 0, _parseStyleAttr, loader);
|
return simpleXmlParseW3CAttribute(value, strlen(value), _parseStyleAttr, loader);
|
||||||
} else if (!strcmp(key, "transform")) {
|
} else if (!strcmp(key, "transform")) {
|
||||||
node->transform = _parseTransformationMatrix(value);
|
node->transform = _parseTransformationMatrix(value);
|
||||||
} else if (!strcmp(key, "id")) {
|
} else if (!strcmp(key, "id")) {
|
||||||
|
@ -1083,7 +1083,7 @@ static bool _attrParseClipPathNode(void* data, const char* key, const char* valu
|
||||||
SvgClipNode* clip = &(node->node.clip);
|
SvgClipNode* clip = &(node->node.clip);
|
||||||
|
|
||||||
if (!strcmp(key, "style")) {
|
if (!strcmp(key, "style")) {
|
||||||
return simpleXmlParseW3CAttribute(value, 0, _parseStyleAttr, loader);
|
return simpleXmlParseW3CAttribute(value, strlen(value), _parseStyleAttr, loader);
|
||||||
} else if (!strcmp(key, "transform")) {
|
} else if (!strcmp(key, "transform")) {
|
||||||
node->transform = _parseTransformationMatrix(value);
|
node->transform = _parseTransformationMatrix(value);
|
||||||
} else if (!strcmp(key, "id")) {
|
} else if (!strcmp(key, "id")) {
|
||||||
|
@ -1107,7 +1107,7 @@ static bool _attrParseMaskNode(void* data, const char* key, const char* value)
|
||||||
SvgMaskNode* mask = &(node->node.mask);
|
SvgMaskNode* mask = &(node->node.mask);
|
||||||
|
|
||||||
if (!strcmp(key, "style")) {
|
if (!strcmp(key, "style")) {
|
||||||
return simpleXmlParseW3CAttribute(value, 0, _parseStyleAttr, loader);
|
return simpleXmlParseW3CAttribute(value, strlen(value), _parseStyleAttr, loader);
|
||||||
} else if (!strcmp(key, "transform")) {
|
} else if (!strcmp(key, "transform")) {
|
||||||
node->transform = _parseTransformationMatrix(value);
|
node->transform = _parseTransformationMatrix(value);
|
||||||
} else if (!strcmp(key, "id")) {
|
} else if (!strcmp(key, "id")) {
|
||||||
|
@ -1286,7 +1286,7 @@ static bool _attrParsePathNode(void* data, const char* key, const char* value)
|
||||||
//Temporary: need to copy
|
//Temporary: need to copy
|
||||||
path->path = _copyId(value);
|
path->path = _copyId(value);
|
||||||
} else if (!strcmp(key, "style")) {
|
} else if (!strcmp(key, "style")) {
|
||||||
return simpleXmlParseW3CAttribute(value, 0, _parseStyleAttr, loader);
|
return simpleXmlParseW3CAttribute(value, strlen(value), _parseStyleAttr, loader);
|
||||||
} else if (!strcmp(key, "clip-path")) {
|
} else if (!strcmp(key, "clip-path")) {
|
||||||
_handleClipPathAttr(loader, node, value);
|
_handleClipPathAttr(loader, node, value);
|
||||||
} else if (!strcmp(key, "mask")) {
|
} else if (!strcmp(key, "mask")) {
|
||||||
|
@ -1348,7 +1348,7 @@ static bool _attrParseCircleNode(void* data, const char* key, const char* value)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!strcmp(key, "style")) {
|
if (!strcmp(key, "style")) {
|
||||||
return simpleXmlParseW3CAttribute(value, 0, _parseStyleAttr, loader);
|
return simpleXmlParseW3CAttribute(value, strlen(value), _parseStyleAttr, loader);
|
||||||
} else if (!strcmp(key, "clip-path")) {
|
} else if (!strcmp(key, "clip-path")) {
|
||||||
_handleClipPathAttr(loader, node, value);
|
_handleClipPathAttr(loader, node, value);
|
||||||
} else if (!strcmp(key, "mask")) {
|
} else if (!strcmp(key, "mask")) {
|
||||||
|
@ -1415,7 +1415,7 @@ static bool _attrParseEllipseNode(void* data, const char* key, const char* value
|
||||||
} else if (!strcmp(key, "class")) {
|
} else if (!strcmp(key, "class")) {
|
||||||
_handleCssClassAttr(loader, node, value);
|
_handleCssClassAttr(loader, node, value);
|
||||||
} else if (!strcmp(key, "style")) {
|
} else if (!strcmp(key, "style")) {
|
||||||
return simpleXmlParseW3CAttribute(value, 0, _parseStyleAttr, loader);
|
return simpleXmlParseW3CAttribute(value, strlen(value), _parseStyleAttr, loader);
|
||||||
} else if (!strcmp(key, "clip-path")) {
|
} else if (!strcmp(key, "clip-path")) {
|
||||||
_handleClipPathAttr(loader, node, value);
|
_handleClipPathAttr(loader, node, value);
|
||||||
} else if (!strcmp(key, "mask")) {
|
} else if (!strcmp(key, "mask")) {
|
||||||
|
@ -1489,7 +1489,7 @@ static bool _attrParsePolygonNode(void* data, const char* key, const char* value
|
||||||
if (!strcmp(key, "points")) {
|
if (!strcmp(key, "points")) {
|
||||||
return _attrParsePolygonPoints(value, &polygon->points, &polygon->pointsCount);
|
return _attrParsePolygonPoints(value, &polygon->points, &polygon->pointsCount);
|
||||||
} else if (!strcmp(key, "style")) {
|
} else if (!strcmp(key, "style")) {
|
||||||
return simpleXmlParseW3CAttribute(value, 0, _parseStyleAttr, loader);
|
return simpleXmlParseW3CAttribute(value, strlen(value), _parseStyleAttr, loader);
|
||||||
} else if (!strcmp(key, "clip-path")) {
|
} else if (!strcmp(key, "clip-path")) {
|
||||||
_handleClipPathAttr(loader, node, value);
|
_handleClipPathAttr(loader, node, value);
|
||||||
} else if (!strcmp(key, "mask")) {
|
} else if (!strcmp(key, "mask")) {
|
||||||
|
@ -1576,7 +1576,7 @@ static bool _attrParseRectNode(void* data, const char* key, const char* value)
|
||||||
} else if (!strcmp(key, "class")) {
|
} else if (!strcmp(key, "class")) {
|
||||||
_handleCssClassAttr(loader, node, value);
|
_handleCssClassAttr(loader, node, value);
|
||||||
} else if (!strcmp(key, "style")) {
|
} else if (!strcmp(key, "style")) {
|
||||||
ret = simpleXmlParseW3CAttribute(value, 0, _parseStyleAttr, loader);
|
ret = simpleXmlParseW3CAttribute(value, strlen(value), _parseStyleAttr, loader);
|
||||||
} else if (!strcmp(key, "clip-path")) {
|
} else if (!strcmp(key, "clip-path")) {
|
||||||
_handleClipPathAttr(loader, node, value);
|
_handleClipPathAttr(loader, node, value);
|
||||||
} else if (!strcmp(key, "mask")) {
|
} else if (!strcmp(key, "mask")) {
|
||||||
|
@ -1641,7 +1641,7 @@ static bool _attrParseLineNode(void* data, const char* key, const char* value)
|
||||||
} else if (!strcmp(key, "class")) {
|
} else if (!strcmp(key, "class")) {
|
||||||
_handleCssClassAttr(loader, node, value);
|
_handleCssClassAttr(loader, node, value);
|
||||||
} else if (!strcmp(key, "style")) {
|
} else if (!strcmp(key, "style")) {
|
||||||
return simpleXmlParseW3CAttribute(value, 0, _parseStyleAttr, loader);
|
return simpleXmlParseW3CAttribute(value, strlen(value), _parseStyleAttr, loader);
|
||||||
} else if (!strcmp(key, "clip-path")) {
|
} else if (!strcmp(key, "clip-path")) {
|
||||||
_handleClipPathAttr(loader, node, value);
|
_handleClipPathAttr(loader, node, value);
|
||||||
} else if (!strcmp(key, "mask")) {
|
} else if (!strcmp(key, "mask")) {
|
||||||
|
@ -1714,7 +1714,7 @@ static bool _attrParseImageNode(void* data, const char* key, const char* value)
|
||||||
} else if (!strcmp(key, "class")) {
|
} else if (!strcmp(key, "class")) {
|
||||||
_handleCssClassAttr(loader, node, value);
|
_handleCssClassAttr(loader, node, value);
|
||||||
} else if (!strcmp(key, "style")) {
|
} else if (!strcmp(key, "style")) {
|
||||||
return simpleXmlParseW3CAttribute(value, 0, _parseStyleAttr, loader);
|
return simpleXmlParseW3CAttribute(value, strlen(value), _parseStyleAttr, loader);
|
||||||
} else if (!strcmp(key, "clip-path")) {
|
} else if (!strcmp(key, "clip-path")) {
|
||||||
_handleClipPathAttr(loader, node, value);
|
_handleClipPathAttr(loader, node, value);
|
||||||
} else if (!strcmp(key, "mask")) {
|
} else if (!strcmp(key, "mask")) {
|
||||||
|
@ -2390,7 +2390,7 @@ static bool _attrParseStops(void* data, const char* key, const char* value)
|
||||||
_toColor(value, &stop->r, &stop->g, &stop->b, nullptr);
|
_toColor(value, &stop->r, &stop->g, &stop->b, nullptr);
|
||||||
}
|
}
|
||||||
} else if (!strcmp(key, "style")) {
|
} else if (!strcmp(key, "style")) {
|
||||||
simpleXmlParseW3CAttribute(value, 0, _attrParseStopsStyle, data);
|
simpleXmlParseW3CAttribute(value, strlen(value), _attrParseStopsStyle, data);
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -2717,6 +2717,7 @@ static void _svgLoaderParserXmlStyle(SvgLoaderData* loader, const char* content,
|
||||||
buflen -= next - buf;
|
buflen -= next - buf;
|
||||||
buf = next;
|
buf = next;
|
||||||
|
|
||||||
|
|
||||||
free(tag);
|
free(tag);
|
||||||
free(name);
|
free(name);
|
||||||
}
|
}
|
||||||
|
|
|
@ -450,7 +450,7 @@ bool simpleXmlParse(const char* buf, unsigned bufLength, bool strip, simpleXMLCb
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool simpleXmlParseW3CAttribute(const char* buf, TVG_UNUSED unsigned buflen, simpleXMLAttributeCb func, const void* data)
|
bool simpleXmlParseW3CAttribute(const char* buf, unsigned buflen, simpleXMLAttributeCb func, const void* data)
|
||||||
{
|
{
|
||||||
const char* end;
|
const char* end;
|
||||||
char* key;
|
char* key;
|
||||||
|
@ -459,7 +459,7 @@ bool simpleXmlParseW3CAttribute(const char* buf, TVG_UNUSED unsigned buflen, sim
|
||||||
|
|
||||||
if (!buf) return false;
|
if (!buf) return false;
|
||||||
|
|
||||||
end = buf + strlen(buf);
|
end = buf + buflen;
|
||||||
key = (char*)alloca(end - buf + 1);
|
key = (char*)alloca(end - buf + 1);
|
||||||
val = (char*)alloca(end - buf + 1);
|
val = (char*)alloca(end - buf + 1);
|
||||||
|
|
||||||
|
@ -475,7 +475,6 @@ bool simpleXmlParseW3CAttribute(const char* buf, TVG_UNUSED unsigned buflen, sim
|
||||||
}
|
}
|
||||||
if (next >= end) next = nullptr;
|
if (next >= end) next = nullptr;
|
||||||
|
|
||||||
|
|
||||||
key[0] = '\0';
|
key[0] = '\0';
|
||||||
val[0] = '\0';
|
val[0] = '\0';
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,7 @@ typedef bool (*simpleXMLAttributeCb)(void* data, const char* key, const char* va
|
||||||
|
|
||||||
bool simpleXmlParseAttributes(const char* buf, unsigned buflen, simpleXMLAttributeCb func, const void* data);
|
bool simpleXmlParseAttributes(const char* buf, unsigned buflen, simpleXMLAttributeCb func, const void* data);
|
||||||
bool simpleXmlParse(const char* buf, unsigned buflen, bool strip, simpleXMLCb func, const void* data);
|
bool simpleXmlParse(const char* buf, unsigned buflen, bool strip, simpleXMLCb func, const void* data);
|
||||||
bool simpleXmlParseW3CAttribute(const char* buf, TVG_UNUSED unsigned buflen, simpleXMLAttributeCb func, const void* data);
|
bool simpleXmlParseW3CAttribute(const char* buf, unsigned buflen, simpleXMLAttributeCb func, const void* data);
|
||||||
const char* simpleXmlParseCSSAttribute(const char* buf, unsigned bufLength, char** tag, char** name, const char** attrs, unsigned* attrsLength);
|
const char* simpleXmlParseCSSAttribute(const char* buf, unsigned bufLength, char** tag, char** name, const char** attrs, unsigned* attrsLength);
|
||||||
const char* simpleXmlFindAttributesTag(const char* buf, unsigned buflen);
|
const char* simpleXmlFindAttributesTag(const char* buf, unsigned buflen);
|
||||||
bool isIgnoreUnsupportedLogElements(const char* tagName);
|
bool isIgnoreUnsupportedLogElements(const char* tagName);
|
||||||
|
|
Loading…
Add table
Reference in a new issue