aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/qqmlvaluetypewrapper.cpp
diff options
context:
space:
mode:
authorFabian Kosmale <fabian.kosmale@qt.io>2020-03-12 10:26:34 +0100
committerFabian Kosmale <fabian.kosmale@qt.io>2020-03-12 16:16:09 +0100
commit5bcb2ff883f9f8ceb42ed6de298aa3036d6413b3 (patch)
tree1bfa418e186424a27b1a6a7bd4f6d4b3f5e023ad /src/qml/qml/qqmlvaluetypewrapper.cpp
parent5c6e0f0095780391c42e848d20ba2cac965b1412 (diff)
Check that value type exists before creating wrapper
Fixes: QTBUG-82843 Change-Id: I1ea4a52b33e7d318525e63346eab46ecf7a8fec0 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Diffstat (limited to 'src/qml/qml/qqmlvaluetypewrapper.cpp')
-rw-r--r--src/qml/qml/qqmlvaluetypewrapper.cpp14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/qml/qml/qqmlvaluetypewrapper.cpp b/src/qml/qml/qqmlvaluetypewrapper.cpp
index ba5ba96cbe..aa7e28add0 100644
--- a/src/qml/qml/qqmlvaluetypewrapper.cpp
+++ b/src/qml/qml/qqmlvaluetypewrapper.cpp
@@ -192,7 +192,12 @@ ReturnedValue QQmlValueTypeWrapper::create(ExecutionEngine *engine, QObject *obj
r->d()->object = object;
r->d()->property = property;
r->d()->setPropertyCache(QJSEnginePrivate::get(engine)->cache(metaObject));
- r->d()->setValueType(QQmlValueTypeFactory::valueType(typeId));
+ auto valueType = QQmlValueTypeFactory::valueType(typeId);
+ if (!valueType) {
+ QMetaType metaType(typeId);
+ return engine->throwTypeError(QLatin1String("Type %1 is not a value type").arg(metaType.name()));
+ }
+ r->d()->setValueType(valueType);
r->d()->setGadgetPtr(nullptr);
return r->asReturnedValue();
}
@@ -204,7 +209,12 @@ ReturnedValue QQmlValueTypeWrapper::create(ExecutionEngine *engine, const QVaria
Scoped<QQmlValueTypeWrapper> r(scope, engine->memoryManager->allocate<QQmlValueTypeWrapper>());
r->d()->setPropertyCache(QJSEnginePrivate::get(engine)->cache(metaObject));
- r->d()->setValueType(QQmlValueTypeFactory::valueType(typeId));
+ auto valueType = QQmlValueTypeFactory::valueType(typeId);
+ if (!valueType) {
+ QMetaType metaType(typeId);
+ return engine->throwTypeError(QLatin1String("Type %1 is not a value type").arg(metaType.name()));
+ }
+ r->d()->setValueType(valueType);
r->d()->setGadgetPtr(nullptr);
r->d()->setValue(value);
return r->asReturnedValue();