diff options
author | Ulf Hermann <ulf.hermann@theqtcompany.com> | 2015-12-11 13:33:18 +0100 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@theqtcompany.com> | 2015-12-11 12:45:01 +0000 |
commit | b52c2f91f5ea4789110ced38a3ff7f696cea601f (patch) | |
tree | 092ffc77f2a402a953ebd44f2556936a4e94807d /src/libs | |
parent | 4e6d2a201f725a21fe3207419ba9b90263ebe704 (diff) | |
download | qt-creator-b52c2f91f5ea4789110ced38a3ff7f696cea601f.tar.gz |
QmlDebug: Avoid dangerous interactions with QPacketProtocolv3.6.0
After deleteLater() a QObject does have another chance to send more
signals. So, if we do that with the underlying QIODevice, we should
disconnect it from the debug connection (which then doesn't have a
QPacketProtocol anymore). Also, setting dev to 0 in QPacketProtocol is
an incredibly bad idea, as we never check it for 0. The only reason
this piece of code is never triggered is that we never generate
invalid packets on purpose.
Change-Id: I80e7f494bf55fa1a510b6f0bdd50cf45cae23734
Task-number: QTCREATORBUG-15496
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
Diffstat (limited to 'src/libs')
-rw-r--r-- | src/libs/qmldebug/qmldebugclient.cpp | 3 | ||||
-rw-r--r-- | src/libs/qmldebug/qpacketprotocol.cpp | 1 |
2 files changed, 3 insertions, 1 deletions
diff --git a/src/libs/qmldebug/qmldebugclient.cpp b/src/libs/qmldebug/qmldebugclient.cpp index 126830ba13..9aa4883843 100644 --- a/src/libs/qmldebug/qmldebugclient.cpp +++ b/src/libs/qmldebug/qmldebugclient.cpp @@ -115,6 +115,9 @@ void QmlDebugConnectionPrivate::disconnected() delete protocol; protocol = 0; if (device) { + // Don't allow any "connected()" or "disconnected()" signals to be triggered anymore. + // As the protocol is gone this would lead to crashes. + device->disconnect(); // Don't immediately delete it as it may do some cleanup on returning from a signal. device->deleteLater(); device = 0; diff --git a/src/libs/qmldebug/qpacketprotocol.cpp b/src/libs/qmldebug/qpacketprotocol.cpp index 6ec50f7b02..3b5a8d8422 100644 --- a/src/libs/qmldebug/qpacketprotocol.cpp +++ b/src/libs/qmldebug/qpacketprotocol.cpp @@ -174,7 +174,6 @@ public Q_SLOTS: this, SLOT(aboutToClose())); QObject::disconnect(dev, SIGNAL(bytesWritten(qint64)), this, SLOT(bytesWritten(qint64))); - dev = 0; emit invalidPacket(); return; } |