aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/qqmlvmemetaobject.cpp
diff options
context:
space:
mode:
authorFabian Kosmale <fabian.kosmale@qt.io>2020-01-10 15:22:20 +0100
committerFabian Kosmale <fabian.kosmale@qt.io>2020-01-13 13:27:36 +0100
commite5570eecd3a4fc61020d28699169707a2c1f5dc9 (patch)
treed98f9b1ac19acbcb50b2194377c798304e958272 /src/qml/qml/qqmlvmemetaobject.cpp
parent517c374375c8b989f17a52aacbd9d5891469cba2 (diff)
QML list property: Avoid crash if contained object is deleted
Task-number: QTBUG-81123 Change-Id: I3dd1a42e444f817722368cd268c2f987a99fbf1c Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Diffstat (limited to 'src/qml/qml/qqmlvmemetaobject.cpp')
-rw-r--r--src/qml/qml/qqmlvmemetaobject.cpp16
1 files changed, 8 insertions, 8 deletions
diff --git a/src/qml/qml/qqmlvmemetaobject.cpp b/src/qml/qml/qqmlvmemetaobject.cpp
index e0ca1ae6c5..eff13ef2c3 100644
--- a/src/qml/qml/qqmlvmemetaobject.cpp
+++ b/src/qml/qml/qqmlvmemetaobject.cpp
@@ -84,15 +84,15 @@ public:
Q_ASSERT(v);
Q_ASSERT(v->d());
QVariant &data = v->d()->data();
- Q_ASSERT(data.userType() == qMetaTypeId<QList<QObject *>>());
- m_list = static_cast<QList<QObject *> *>(data.data());
+ Q_ASSERT(data.userType() == qMetaTypeId<QVector<QQmlGuard<QObject>>>());
+ m_list = static_cast<QVector<QQmlGuard<QObject>> *>(data.data());
Q_ASSERT(m_list);
}
~ResolvedList() = default;
QQmlVMEMetaObject *metaObject() const { return m_metaObject; }
- QList<QObject *> *list() const { return m_list; }
+ QVector<QQmlGuard<QObject>> *list() const { return m_list; }
quintptr id() const { return m_id; }
void activateSignal() const
@@ -103,7 +103,7 @@ public:
private:
QQmlVMEMetaObject *m_metaObject = nullptr;
- QList<QObject *> *m_list = nullptr;
+ QVector<QQmlGuard<QObject>> *m_list = nullptr;
quintptr m_id = 0;
};
@@ -604,7 +604,7 @@ QObject* QQmlVMEMetaObject::readPropertyAsQObject(int id) const
return wrapper->object();
}
-QList<QObject *> *QQmlVMEMetaObject::readPropertyAsList(int id) const
+QVector<QQmlGuard<QObject>> *QQmlVMEMetaObject::readPropertyAsList(int id) const
{
QV4::MemberData *md = propertyAndMethodStorageAsMemberData();
if (!md)
@@ -612,12 +612,12 @@ QList<QObject *> *QQmlVMEMetaObject::readPropertyAsList(int id) const
QV4::Scope scope(engine);
QV4::Scoped<QV4::VariantObject> v(scope, *(md->data() + id));
- if (!v || (int)v->d()->data().userType() != qMetaTypeId<QList<QObject *> >()) {
- QVariant variant(QVariant::fromValue(QList<QObject*>()));
+ if (!v || (int)v->d()->data().userType() != qMetaTypeId<QVector<QQmlGuard<QObject>> >()) {
+ QVariant variant(QVariant::fromValue(QVector<QQmlGuard<QObject>>()));
v = engine->newVariantObject(variant);
md->set(engine, id, v);
}
- return static_cast<QList<QObject *> *>(v->d()->data().data());
+ return static_cast<QVector<QQmlGuard<QObject>> *>(v->d()->data().data());
}
QRectF QQmlVMEMetaObject::readPropertyAsRectF(int id) const