From ef0e13257ddd57c967000213e3c9812b3c08da91 Mon Sep 17 00:00:00 2001 From: Fabian Kosmale Date: Tue, 1 Mar 2022 11:25:11 +0100 Subject: QMetaObjectBuilder: Always set Data::metatypes The array of metatypes should always contain at least one entry (for the metatype of the current metaobject itself). This prevents crashes in the case of a metaobject without meta-methods and properties (as observed in Qt for Python). Pick-to: 6.2 6.3 Change-Id: I7a6fb316eea48c4852b6f1c26e0a930aeba4c799 Reviewed-by: Friedemann Kleint --- .../kernel/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'tests/auto/corelib/kernel') diff --git a/tests/auto/corelib/kernel/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp b/tests/auto/corelib/kernel/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp index 188a5a6626..9e96d0e02c 100644 --- a/tests/auto/corelib/kernel/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp +++ b/tests/auto/corelib/kernel/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp @@ -67,6 +67,8 @@ private slots: void cleanupTestCase(); + void ownMetaTypeNoProperties(); + private: static bool checkForSideEffects (const QMetaObjectBuilder& builder, @@ -1657,6 +1659,16 @@ void tst_QMetaObjectBuilder::propertyMetaType() free(mo); } +void tst_QMetaObjectBuilder::ownMetaTypeNoProperties() +{ + QMetaObjectBuilder builder; + builder.setClassName("NoProperties"); + auto mo = builder.toMetaObject(); + auto cleanup = qScopeGuard([&](){ free(mo); }); + // own metatype should be invalid, as the dynamic metaobject has not been registered + QVERIFY(!mo->metaType().isValid());// should not crash +} + void tst_QMetaObjectBuilder::cleanupTestCase() { for (QMetaObject *obj: dynamicMetaObjectsPendingFree) -- cgit v1.2.3