summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel
diff options
context:
space:
mode:
authorMilian Wolff <milian.wolff@kdab.com>2019-04-09 13:38:06 +0200
committerMilian Wolff <milian.wolff@kdab.com>2019-04-09 15:46:35 +0000
commit5f2afe18ccb0bbe258d4016ef65218cd3656cac2 (patch)
tree4f20c62ba8bc1fd5d519be1672ebf31ef7dd4f90 /src/corelib/kernel
parent6d4a456a28282973d2501e0b16f09cafb316bb0a (diff)
Fix QMetaObject::newInstance on non-QObject meta object
QMetaObject::newInstance returns a QObject, thus it's not possible to create a new instance of a Q_GADGET using this function. Previously, we returned a non-null QObject pointer for such scenarios, which then leads to crashes when one tries to use it. Now, we check whether the meta object inherits QObject's meta object, and error out early otherwise. Change-Id: I7b1fb6c8d48b3e98161894be2f281a491963345e Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/kernel')
-rw-r--r--src/corelib/kernel/qmetaobject.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/corelib/kernel/qmetaobject.cpp b/src/corelib/kernel/qmetaobject.cpp
index b8b5c0de46..666bb6eace 100644
--- a/src/corelib/kernel/qmetaobject.cpp
+++ b/src/corelib/kernel/qmetaobject.cpp
@@ -235,6 +235,12 @@ QObject *QMetaObject::newInstance(QGenericArgument val0,
QGenericArgument val8,
QGenericArgument val9) const
{
+ if (!inherits(&QObject::staticMetaObject))
+ {
+ qWarning("QMetaObject::newInstance: type %s does not inherit QObject", className());
+ return nullptr;
+ }
+
QByteArray constructorName = className();
{
int idx = constructorName.lastIndexOf(':');