diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2021-08-25 09:54:55 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2021-08-30 07:18:49 +0000 |
commit | d52299b71810509640d0324b8fe21c25d91f37d6 (patch) | |
tree | 3294105eba3109413d4b622593fbd7e8a610ae53 | |
parent | 66d5e8003e1a91c481d45aa3ab1ef269a98ef52b (diff) |
Protect unregisterInternalCompositeType() against null metatype data
This may be called on shutdown when the data is already gone.
Fixes: QDS-4390
Change-Id: I89de5fc1e66fca4318939179ed356620110b08e9
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
(cherry picked from commit 98af4ab983b9b33c6f5cdb71f6f4f4dd7419aa30)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | src/qml/qml/qqmlmetatype.cpp | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/src/qml/qml/qqmlmetatype.cpp b/src/qml/qml/qqmlmetatype.cpp index 8b92a2ff8c..a8cd22e353 100644 --- a/src/qml/qml/qqmlmetatype.cpp +++ b/src/qml/qml/qqmlmetatype.cpp @@ -588,12 +588,14 @@ void QQmlMetaType::unregisterInternalCompositeType(const CompositeMetaTypeIds &t QMetaType metaType(typeIds.id); QMetaType listMetaType(typeIds.listId); + // This may be called from delayed dtors on shutdown when the data is already gone. QQmlMetaTypeDataPtr data; - - if (QQmlValueType *vt = data->metaTypeToValueType.take(metaType.id())) - delete vt; - if (QQmlValueType *vt = data->metaTypeToValueType.take(listMetaType.id())) - delete vt; + if (data.isValid()) { + if (QQmlValueType *vt = data->metaTypeToValueType.take(metaType.id())) + delete vt; + if (QQmlValueType *vt = data->metaTypeToValueType.take(listMetaType.id())) + delete vt; + } QMetaType::unregisterMetaType(metaType); QMetaType::unregisterMetaType(listMetaType); |