diff options
author | Arno Rehn <a.rehn@menlosystems.com> | 2019-07-11 20:51:07 +0200 |
---|---|---|
committer | Arno Rehn <a.rehn@menlosystems.com> | 2019-07-26 15:47:47 +0200 |
commit | 29496e3f08e20398e253e6d32bb95879a1a68978 (patch) | |
tree | 2896ce0f5f0beaa694d70342646143a1e5f69063 /src | |
parent | 25fb211a32890a1bdd2b28b9727f6806a88d221c (diff) | |
download | qtwebchannel-29496e3f08e20398e253e6d32bb95879a1a68978.tar.gz |
Correctly link transports to implicitly wrapped objects
When an object is wrapped as consequence of a property update or signal
emission, wrapResult() assigns it the parent object's list of transports.
It didn't, however, establish the reverse relation, i.e from transport
to object. This resulted in dangling pointers after client disconnects
and subsequent crashes.
This patch fixes the bug.
Change-Id: I5d20269c453902bf2883dfcab1f3ab5d0757c2cd
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/webchannel/qmetaobjectpublisher.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/webchannel/qmetaobjectpublisher.cpp b/src/webchannel/qmetaobjectpublisher.cpp index 102cbda..e23921d 100644 --- a/src/webchannel/qmetaobjectpublisher.cpp +++ b/src/webchannel/qmetaobjectpublisher.cpp @@ -739,15 +739,19 @@ QJsonValue QMetaObjectPublisher::wrapResult(const QVariant &result, QWebChannelA ObjectInfo oi(object); if (transport) { oi.transports.append(transport); + transportedWrappedObjects.insert(transport, id); } else { // use the transports from the parent object oi.transports = wrappedObjects.value(parentObjectId).transports; // or fallback to all transports if the parent is not wrapped if (oi.transports.isEmpty()) oi.transports = webChannel->d_func()->transports; + + for (auto transport : qAsConst(oi.transports)) { + transportedWrappedObjects.insert(transport, id); + } } wrappedObjects.insert(id, oi); - transportedWrappedObjects.insert(transport, id); initializePropertyUpdates(object, classInfo); } else if (wrappedObjects.contains(id)) { |