From aee2f28306491f25b7159c58904e708aaef4205b Mon Sep 17 00:00:00 2001 From: Brett Stottlemyer Date: Sun, 7 Mar 2021 08:03:33 -0500 Subject: ExternalIODevice fixes Make sure the input QIODevice is valid and the disconnect signal (if available) is connected. Task-number: QTBUG-84640 Change-Id: I9e65dc903ce0e92da4f4a1e07fd5d6b66815e2a4 Reviewed-by: Sona Kurazyan (cherry picked from commit e910e445a4860467bc99e2bb446978fa790815dd) Reviewed-by: Qt Cherry-pick Bot --- src/remoteobjects/qconnectionfactories.cpp | 2 +- src/remoteobjects/qremoteobjectnode.cpp | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/remoteobjects/qconnectionfactories.cpp b/src/remoteobjects/qconnectionfactories.cpp index f1091fa..9ddea61 100644 --- a/src/remoteobjects/qconnectionfactories.cpp +++ b/src/remoteobjects/qconnectionfactories.cpp @@ -234,7 +234,7 @@ ExternalIoDevice::ExternalIoDevice(QIODevice *device, QObject *parent) connect(m_device.data(), &QIODevice::aboutToClose, this, [this]() { this->m_isClosing = true; }); connect(m_device.data(), &QIODevice::readyRead, this, &ExternalIoDevice::readyRead); auto meta = device->metaObject(); - if (-1 == meta->indexOfSignal(SIGNAL(disconnected()))) + if (-1 != meta->indexOfSignal(SIGNAL(disconnected()))) connect(m_device.data(), SIGNAL(disconnected()), this, SIGNAL(disconnected())); } diff --git a/src/remoteobjects/qremoteobjectnode.cpp b/src/remoteobjects/qremoteobjectnode.cpp index 6e9d25f..e918b10 100644 --- a/src/remoteobjects/qremoteobjectnode.cpp +++ b/src/remoteobjects/qremoteobjectnode.cpp @@ -2068,6 +2068,10 @@ bool QRemoteObjectNode::connectToNode(const QUrl &address) void QRemoteObjectNode::addClientSideConnection(QIODevice *ioDevice) { Q_D(QRemoteObjectNode); + if (!ioDevice || !ioDevice->isOpen()) { + qWarning() << "A null or closed QIODevice was passed to addClientSideConnection(). Ignoring."; + return; + } ExternalIoDevice *device = new ExternalIoDevice(ioDevice, this); connect(device, &IoDeviceBase::readyRead, this, [d, device]() { d->onClientRead(device); @@ -2317,6 +2321,10 @@ bool QRemoteObjectHostBase::disableRemoting(QObject *remoteObject) void QRemoteObjectHostBase::addHostSideConnection(QIODevice *ioDevice) { Q_D(QRemoteObjectHostBase); + if (!ioDevice || !ioDevice->isOpen()) { + qWarning() << "A null or closed QIODevice was passed to addHostSideConnection(). Ignoring."; + return; + } if (!d->remoteObjectIo) d->remoteObjectIo = new QRemoteObjectSourceIo(this); ExternalIoDevice *device = new ExternalIoDevice(ioDevice, this); -- cgit v1.2.3