diff options
author | Tomaž Vajngerl <tomaz.vajngerl@collabora.com> | 2014-04-16 09:40:29 +0200 |
---|---|---|
committer | Tomaž Vajngerl <tomaz.vajngerl@collabora.com> | 2014-04-16 09:51:06 +0200 |
commit | 3b7472b284131c09d91b69f26d5d26d54648f939 (patch) | |
tree | 31ad310cb78f4d3d47e56d2be6a3c0b890d510c5 /svgio/source/svgreader | |
parent | cae4370bce63e161fc5ecceb70f74ca50d64ed93 (diff) |
fdo#74743 avoid infinite loop when gathering "svg" element styles
Change-Id: Ifcfd0c64302b9174510e3d774607f5ca60173885
Diffstat (limited to 'svgio/source/svgreader')
-rw-r--r-- | svgio/source/svgreader/svgstyleattributes.cxx | 16 | ||||
-rw-r--r-- | svgio/source/svgreader/svgsvgnode.cxx | 3 |
2 files changed, 9 insertions, 10 deletions
diff --git a/svgio/source/svgreader/svgstyleattributes.cxx b/svgio/source/svgreader/svgstyleattributes.cxx index 4e7388882bc1..9c080cdcd532 100644 --- a/svgio/source/svgreader/svgstyleattributes.cxx +++ b/svgio/source/svgreader/svgstyleattributes.cxx @@ -205,17 +205,15 @@ namespace svgio const SvgStyleAttributes* SvgStyleAttributes::getParentStyle() const { - if(getCssStyleParent()) - { - return getCssStyleParent(); - } + const SvgStyleAttributes* pParentStyle = getCssStyleParent(); - if(mrOwner.getParent()) - { - return mrOwner.getParent()->getSvgStyleAttributes(); - } + // no parent style set, check parent for its style attributes + if(pParentStyle == NULL && mrOwner.getParent() != NULL) + pParentStyle = mrOwner.getParent()->getSvgStyleAttributes(); - return 0; + if (pParentStyle != this) // to prevent infinite loop + return pParentStyle; + return NULL; } void SvgStyleAttributes::add_text( diff --git a/svgio/source/svgreader/svgsvgnode.cxx b/svgio/source/svgreader/svgsvgnode.cxx index fef34ef8eda7..78e3ac930d3b 100644 --- a/svgio/source/svgreader/svgsvgnode.cxx +++ b/svgio/source/svgreader/svgsvgnode.cxx @@ -60,7 +60,8 @@ namespace svgio const SvgStyleAttributes* SvgSvgNode::getSvgStyleAttributes() const { - return checkForCssStyle(OUString("svg"), maSvgStyleAttributes); + checkForCssStyle(OUString("svg"), maSvgStyleAttributes); + return maSvgStyleAttributes.getCssStyleParent(); } void SvgSvgNode::parseAttribute(const OUString& rTokenName, SVGToken aSVGToken, const OUString& aContent) |