Skip to content

Commit

Permalink
Do not crash when icon's width or height is 0
Browse files Browse the repository at this point in the history
Summary:
When Icon's width or height is 0, I get a crash with the following backtrace:

    #0  0x00007ffff7b9cd30 in QSGTexture::setFiltering(QSGTexture::Filtering) () from /usr/lib/libQt5Quick.so.5
    #1  0x00007ffff7bd439c in QSGOpaqueTextureMaterialShader::updateState(QSGMaterialShader::RenderState const&, QSGMaterial*, QSGMaterial*) () from /usr/lib/libQt5Quick.so.5
    #2  0x00007ffff7bb7857 in QSGBatchRenderer::Renderer::renderMergedBatch(QSGBatchRenderer::Batch const*) () from /usr/lib/libQt5Quick.so.5
    #3  0x00007ffff7bbd5b6 in QSGBatchRenderer::Renderer::renderBatches() () from /usr/lib/libQt5Quick.so.5
    #4  0x00007ffff7bbdcc5 in QSGBatchRenderer::Renderer::render() () from /usr/lib/libQt5Quick.so.5
    #5  0x00007ffff7ba1832 in QSGRenderer::renderScene(QSGBindable const&) () from /usr/lib/libQt5Quick.so.5
    #6  0x00007ffff7ba1d14 in QSGRenderer::renderScene(unsigned int) () from /usr/lib/libQt5Quick.so.5
    #7  0x00007ffff7c10713 in QSGDefaultRenderContext::renderNextFrame(QSGRenderer*, unsigned int) () from /usr/lib/libQt5Quick.so.5
    #8  0x00007ffff7c7b3a1 in QQuickWindowPrivate::renderSceneGraph(QSize const&, QSize const&) () from /usr/lib/libQt5Quick.so.5

This patch prevents Icon from doing anything when width or height is 0, avoiding the crash.

BUG: 417844
FIXED-IN: 5.68

Test Plan:
The following QML code, when ran through qmlscene, no longer crashes:

```
import QtQuick 2.12
import org.kde.kirigami 2.11 as Kirigami
Item {
    Kirigami.Icon { source: "document-new" }
}
```

Reviewers: #kirigami, davidedmundson

Reviewed By: davidedmundson

Subscribers: ngraham, davidedmundson, plasma-devel

Tags: #kirigami

Differential Revision: https://phabricator.kde.org/D27505
  • Loading branch information
awhiemstra committed Feb 20, 2020
1 parent 2cea7b4 commit fcae16b
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion src/icon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -282,7 +282,7 @@ bool Icon::smooth() const

QSGNode* Icon::updatePaintNode(QSGNode* node, QQuickItem::UpdatePaintNodeData* /*data*/)
{
if (m_source.isNull()) {
if (m_source.isNull() || qFuzzyIsNull(width()) || qFuzzyIsNull(height())) {
delete node;
return Q_NULLPTR;
}
Expand Down

0 comments on commit fcae16b

Please sign in to comment.