From 008c8119ee10a453580281c16e4737efe98203e8 Mon Sep 17 00:00:00 2001 From: Fabian Kosmale Date: Thu, 12 Mar 2020 10:26:34 +0100 Subject: Check that value type exists before creating wrapper Fixes: QTBUG-82843 Change-Id: I1ea4a52b33e7d318525e63346eab46ecf7a8fec0 Reviewed-by: Ulf Hermann (cherry picked from commit 5bcb2ff883f9f8ceb42ed6de298aa3036d6413b3) --- src/qml/qml/qqmlvaluetypewrapper.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/qml/qml/qqmlvaluetypewrapper.cpp b/src/qml/qml/qqmlvaluetypewrapper.cpp index b22d1530e2..5d7a2130b2 100644 --- a/src/qml/qml/qqmlvaluetypewrapper.cpp +++ b/src/qml/qml/qqmlvaluetypewrapper.cpp @@ -192,7 +192,11 @@ 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()->valueType = QQmlValueTypeFactory::valueType(typeId); + auto valueType = QQmlValueTypeFactory::valueType(typeId); + if (!valueType) { + return engine->throwTypeError(QString::fromLatin1("Type %1 is not a value type").arg(QString::fromLocal8Bit(QMetaType::typeName(typeId)))); + } + r->d()->valueType = valueType; r->d()->gadgetPtr = nullptr; return r->asReturnedValue(); } @@ -204,7 +208,11 @@ ReturnedValue QQmlValueTypeWrapper::create(ExecutionEngine *engine, const QVaria Scoped r(scope, engine->memoryManager->allocate()); r->d()->setPropertyCache(QJSEnginePrivate::get(engine)->cache(metaObject)); - r->d()->valueType = QQmlValueTypeFactory::valueType(typeId); + auto valueType = QQmlValueTypeFactory::valueType(typeId); + if (!valueType) { + return engine->throwTypeError(QString::fromLatin1("Type %1 is not a value type").arg(QString::fromLocal8Bit(QMetaType::typeName(typeId)))); + } + r->d()->valueType = valueType; r->d()->gadgetPtr = nullptr; r->d()->setValue(value); return r->asReturnedValue(); -- cgit v1.2.3