aboutsummaryrefslogtreecommitdiffstats
path: root/src/webchannel/qmetaobjectpublisher.cpp
diff options
context:
space:
mode:
authorMilian Wolff <milian.wolff@kdab.com>2018-04-16 22:50:44 +0200
committerFrederik Gladhorn <frederik.gladhorn@qt.io>2018-10-25 15:47:29 +0000
commit8d03b5fdb232ddb8b5d3b27fd7627401dbd154f8 (patch)
tree1e9d3b96b992ae375fd2105c62698ba04c34574c /src/webchannel/qmetaobjectpublisher.cpp
parent65870525c01915fadaa322599b6f9064995d7762 (diff)
Prevent crashes by fixing mapping of transport to wrapped objects
When an already-wrapped object was used by a secondary transport, the mapping was not updated. This could then lead to crashes when the transport was destroyed. [ChangeLog][General] Fix crash when wrapped objects are shared across multiple transports. Task-number: QTBUG-62388 Change-Id: I3c3b7302205e10f04695f1a202325704d90950d2 Reviewed-by: Kai Dohmen <psykai1993@googlemail.com> Reviewed-by: Simon Hausmann <simon.hausmann@qt.io> Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
Diffstat (limited to 'src/webchannel/qmetaobjectpublisher.cpp')
-rw-r--r--src/webchannel/qmetaobjectpublisher.cpp4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/webchannel/qmetaobjectpublisher.cpp b/src/webchannel/qmetaobjectpublisher.cpp
index 8e83237..d107848 100644
--- a/src/webchannel/qmetaobjectpublisher.cpp
+++ b/src/webchannel/qmetaobjectpublisher.cpp
@@ -563,8 +563,10 @@ QJsonValue QMetaObjectPublisher::wrapResult(const QVariant &result, QWebChannelA
} else if (wrappedObjects.contains(id)) {
Q_ASSERT(object == wrappedObjects.value(id).object);
// check if this transport is already assigned to the object
- if (transport && !wrappedObjects.value(id).transports.contains(transport))
+ if (transport && !wrappedObjects.value(id).transports.contains(transport)) {
wrappedObjects[id].transports.append(transport);
+ transportedWrappedObjects.insert(transport, id);
+ }
classInfo = wrappedObjects.value(id).classinfo;
}