diff options
author | Milian Wolff <milian.wolff@kdab.com> | 2019-04-09 13:38:06 +0200 |
---|---|---|
committer | Milian Wolff <milian.wolff@kdab.com> | 2019-04-09 15:46:35 +0000 |
commit | 5f2afe18ccb0bbe258d4016ef65218cd3656cac2 (patch) | |
tree | 4f20c62ba8bc1fd5d519be1672ebf31ef7dd4f90 /src/corelib/kernel | |
parent | 6d4a456a28282973d2501e0b16f09cafb316bb0a (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.cpp | 6 |
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(':'); |