summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSlávek Banko <slavek.banko@axis.cz>2022-03-10 02:49:33 +0100
committerSlávek Banko <slavek.banko@axis.cz>2022-03-10 02:49:33 +0100
commit2fcbb8f256f515bec9b5db93743f281b00aba827 (patch)
treeacbae9976f0f98c9701aad819c7cac3a0855ad4d
parent003976f81b99deaae413bb04f823ca1e5419929d (diff)
downloadtdelibs-2fcbb8f256f515bec9b5db93743f281b00aba827.tar.gz
tdelibs-2fcbb8f256f515bec9b5db93743f281b00aba827.zip
svgicons: Create initial icon painter before size detection.
This resolve the potential crash during size detection. Signed-off-by: Slávek Banko <slavek.banko@axis.cz>
-rw-r--r--tdecore/svgicons/ksvgiconengine.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/tdecore/svgicons/ksvgiconengine.cpp b/tdecore/svgicons/ksvgiconengine.cpp
index 1a3004506..97e60fcb7 100644
--- a/tdecore/svgicons/ksvgiconengine.cpp
+++ b/tdecore/svgicons/ksvgiconengine.cpp
@@ -595,6 +595,10 @@ bool KSVGIconEngine::load(int width, int height, const TQString &path)
// Detect width and height
TQDomElement rootElement = rootNode.toElement();
+ bool recreatePainter = false;
+
+ // Create initial icon painter
+ d->painter = new KSVGIconPainter(width, height);
d->width = width; // this sets default for no width -> 100% case
if(rootElement.hasAttribute("width"))
@@ -604,6 +608,7 @@ bool KSVGIconEngine::load(int width, int height, const TQString &path)
if(!width) // no width set, use default
{
width = d->width;
+ recreatePainter = true;
}
}
@@ -615,13 +620,16 @@ bool KSVGIconEngine::load(int width, int height, const TQString &path)
if(!height) // no height set, use default
{
height = d->height;
+ recreatePainter = true;
}
}
- // Create icon painter
- d->painter = new KSVGIconPainter(width, height);
-
- // Create icon painter
+ // Create final icon painter
+ if(recreatePainter)
+ {
+ delete d->painter;
+ d->painter = new KSVGIconPainter(width, height);
+ }
d->painter->setDrawWidth(static_cast<int>(d->width));
d->painter->setDrawHeight(static_cast<int>(d->height));