From 8d15b2c3dbad718782d3923ece0eb6816beafab0 Mon Sep 17 00:00:00 2001 From: Tomaž Vajngerl Date: Wed, 16 Apr 2014 09:40:29 +0200 Subject: fdo#74743 avoid infinite loop when gathering "svg" element styles Change-Id: Ifcfd0c64302b9174510e3d774607f5ca60173885 Signed-off-by: Andras Timar --- svgio/source/svgreader/svgstyleattributes.cxx | 16 +++++++--------- 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 ecddfbf3a5e9..0fae7366f1f0 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 8e107c650c70..cde53879a879 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) -- cgit v1.2.3