forked from qt-creator/qt-creator
QmlDebug: Avoid dangerous interactions with QPacketProtocol
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>
This commit is contained in:
@@ -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;
|
||||
|
@@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user