From 99cd623fa7b9d57c78c9b59d37bc7e12f74bbd34 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Fri, 27 Mar 2020 12:55:38 +0100 Subject: [PATCH] QmlDesigner: Fix crash when selecting ISO icon On macOS. Never use dynamic_cast over library boundaries - it may or may not work, depending on compiler/platform. Fixes: QTCREATORBUG-23773 Change-Id: I889d35f336ff80e2b1ae3cbe921f7de2fe541bd8 Reviewed-by: Thomas Hartmann --- src/plugins/qmldesigner/documentmanager.cpp | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/plugins/qmldesigner/documentmanager.cpp b/src/plugins/qmldesigner/documentmanager.cpp index 2cae7208c5d..0e657f777c0 100644 --- a/src/plugins/qmldesigner/documentmanager.cpp +++ b/src/plugins/qmldesigner/documentmanager.cpp @@ -398,19 +398,20 @@ void DocumentManager::findPathToIsoProFile(bool *iconResourceFileAlreadyExists, qCDebug(documentManagerLog) << "Checking" << node->displayName() << "(" << node << ")"; if (node->isVirtualFolderType() && node->displayName() == "Resources") { - auto virtualFolderNode = dynamic_cast(node); + ProjectExplorer::FolderNode *virtualFolderNode = node->asFolderNode(); + if (QTC_GUARD(virtualFolderNode)) { + for (int subFolderIndex = 0; subFolderIndex < virtualFolderNode->folderNodes().size() && !iconQrcFileNode; ++subFolderIndex) { + ProjectExplorer::FolderNode *subFolderNode = virtualFolderNode->folderNodes().at(subFolderIndex); - for (int subFolderIndex = 0; subFolderIndex < virtualFolderNode->folderNodes().size() && !iconQrcFileNode; ++subFolderIndex) { - ProjectExplorer::FolderNode *subFolderNode = virtualFolderNode->folderNodes().at(subFolderIndex); + qCDebug(documentManagerLog) << "Checking if" << subFolderNode->displayName() << "(" + << subFolderNode << ") is" << isoIconsQrcFile; - qCDebug(documentManagerLog) << "Checking if" << subFolderNode->displayName() << "(" - << subFolderNode << ") is" << isoIconsQrcFile; + if (subFolderNode->isFolderNodeType() && subFolderNode->displayName() == isoIconsQrcFile) { + qCDebug(documentManagerLog) << "Found" << isoIconsQrcFile << "in" << virtualFolderNode->filePath(); - if (subFolderNode->isFolderNodeType() && subFolderNode->displayName() == isoIconsQrcFile) { - qCDebug(documentManagerLog) << "Found" << isoIconsQrcFile << "in" << virtualFolderNode->filePath(); - - iconQrcFileNode = subFolderNode; - *resourceFileProPath = iconQrcFileNode->parentProjectNode()->filePath().toString(); + iconQrcFileNode = subFolderNode; + *resourceFileProPath = iconQrcFileNode->parentProjectNode()->filePath().toString(); + } } } }