diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2023-02-13 08:15:16 +0100 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2023-02-17 11:06:21 +0100 |
commit | e3cc1bdb1c77c73d6f7fcfc0d18835ac45477b37 (patch) | |
tree | 2d97b55804e08940c93eeb49f92e1f88b6cdcbee | |
parent | d4bb93cb0580d5dce013e7bcbe2727a98d1ab8bd (diff) |
qmltyperegistrar: Guard against file system failures
Pick-to: 6.5
Coverity-Id: 404703
Change-Id: Icf3fd90e392891bcc0c48f4ce6be8731abbeb1aa
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
-rw-r--r-- | src/qmltyperegistrar/qqmltyperegistrar.cpp | 4 | ||||
-rw-r--r-- | src/qmltyperegistrar/qqmltyperegistrar_p.h | 2 | ||||
-rw-r--r-- | src/qmltyperegistrar/qqmltypescreator.cpp | 12 | ||||
-rw-r--r-- | src/qmltyperegistrar/qqmltypescreator_p.h | 2 | ||||
-rw-r--r-- | tools/qmltyperegistrar/qmltyperegistrar.cpp | 6 |
5 files changed, 17 insertions, 9 deletions
diff --git a/src/qmltyperegistrar/qqmltyperegistrar.cpp b/src/qmltyperegistrar/qqmltyperegistrar.cpp index 43cf5ece2e..75072c926f 100644 --- a/src/qmltyperegistrar/qqmltyperegistrar.cpp +++ b/src/qmltyperegistrar/qqmltyperegistrar.cpp @@ -447,7 +447,7 @@ static const QQmlModuleRegistration registration("%1", %4); output << u"} // namespace %1\n"_s.arg(m_targetNamespace); } -void QmlTypeRegistrar::generatePluginTypes(const QString &pluginTypesFile) +bool QmlTypeRegistrar::generatePluginTypes(const QString &pluginTypesFile) { QmlTypesCreator creator; creator.setOwnTypes(m_types); @@ -456,7 +456,7 @@ void QmlTypeRegistrar::generatePluginTypes(const QString &pluginTypesFile) creator.setModule(m_module); creator.setVersion(QTypeRevision::fromVersion(m_moduleVersion.majorVersion(), 0)); - creator.generate(pluginTypesFile); + return creator.generate(pluginTypesFile); } void QmlTypeRegistrar::setModuleNameAndNamespace(const QString &module, diff --git a/src/qmltyperegistrar/qqmltyperegistrar_p.h b/src/qmltyperegistrar/qqmltyperegistrar_p.h index a01b4f1e15..659c7ea988 100644 --- a/src/qmltyperegistrar/qqmltyperegistrar_p.h +++ b/src/qmltyperegistrar/qqmltyperegistrar_p.h @@ -41,7 +41,7 @@ class QmlTypeRegistrar public: void write(QTextStream &os); - void generatePluginTypes(const QString &pluginTypesFile); + bool generatePluginTypes(const QString &pluginTypesFile); void setModuleNameAndNamespace(const QString &module, const QString &targetNamespace); void setModuleVersions(QTypeRevision moduleVersion, const QList<quint8> &pastMajorVersions, bool followForeignVersioning); diff --git a/src/qmltyperegistrar/qqmltypescreator.cpp b/src/qmltyperegistrar/qqmltypescreator.cpp index dbc438c50e..d7b25cca56 100644 --- a/src/qmltyperegistrar/qqmltypescreator.cpp +++ b/src/qmltyperegistrar/qqmltypescreator.cpp @@ -423,7 +423,7 @@ void QmlTypesCreator::writeComponents() } } -void QmlTypesCreator::generate(const QString &outFileName) +bool QmlTypesCreator::generate(const QString &outFileName) { m_qml.writeStartDocument(); m_qml.writeLibraryImport(QLatin1String("QtQuick.tooling"), 1, 2); @@ -439,9 +439,13 @@ void QmlTypesCreator::generate(const QString &outFileName) m_qml.writeEndObject(); QSaveFile file(outFileName); - file.open(QIODevice::WriteOnly); - file.write(m_output); - file.commit(); + if (!file.open(QIODevice::WriteOnly)) + return false; + + if (file.write(m_output) != m_output.size()) + return false; + + return file.commit(); } QT_END_NAMESPACE diff --git a/src/qmltyperegistrar/qqmltypescreator_p.h b/src/qmltyperegistrar/qqmltypescreator_p.h index 928e3cf6d8..eeab19a71b 100644 --- a/src/qmltyperegistrar/qqmltypescreator_p.h +++ b/src/qmltyperegistrar/qqmltypescreator_p.h @@ -28,7 +28,7 @@ class QmlTypesCreator public: QmlTypesCreator() : m_qml(&m_output) {} - void generate(const QString &outFileName); + bool generate(const QString &outFileName); void setOwnTypes(QVector<QJsonObject> ownTypes) { m_ownTypes = std::move(ownTypes); } void setForeignTypes(QVector<QJsonObject> foreignTypes) { m_foreignTypes = std::move(foreignTypes); } diff --git a/tools/qmltyperegistrar/qmltyperegistrar.cpp b/tools/qmltyperegistrar/qmltyperegistrar.cpp index 5d895bbed7..c24fd38561 100644 --- a/tools/qmltyperegistrar/qmltyperegistrar.cpp +++ b/tools/qmltyperegistrar/qmltyperegistrar.cpp @@ -156,6 +156,10 @@ int main(int argc, char **argv) return EXIT_SUCCESS; typeRegistrar.setReferencedTypes(processor.referencedTypes()); - typeRegistrar.generatePluginTypes(parser.value(pluginTypesOption)); + const QString qmltypes = parser.value(pluginTypesOption); + if (!typeRegistrar.generatePluginTypes(qmltypes)) { + fprintf(stderr, "Error: Cannot generate qmltypes file %s\n", qPrintable(qmltypes)); + return EXIT_FAILURE; + } return EXIT_SUCCESS; } |