diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2023-11-08 13:27:47 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2023-11-10 21:08:30 +0000 |
commit | 505c50ce8acb4785811b803752bb9e1cf1feb116 (patch) | |
tree | 97b1ccc3bfce30e73fbfbcb1fcddf4834a835ac2 | |
parent | f0693acc193cfd147708cf190fd706df1e7c6765 (diff) |
Fix a crash due to null QHostAddress in the TCP/IP backend
When called in boot phases of embedded devices, host name resolution
can fail, resulting in an assert/crash. Bail out with a warning
instead.
Pick-to: 6.5 6.2 5.15
Fixes: QTBUG-116151
Change-Id: I1d8465bd35ff250d3a4b9dbde53bd6634ae70fc6
Reviewed-by: Brett Stottlemyer <bstottle@ford.com>
(cherry picked from commit 65dbc006c81ccaea6af5f0b1e2425cfdb2158325)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | src/remoteobjects/qconnection_tcpip_backend.cpp | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/src/remoteobjects/qconnection_tcpip_backend.cpp b/src/remoteobjects/qconnection_tcpip_backend.cpp index b8f584d..a493c03 100644 --- a/src/remoteobjects/qconnection_tcpip_backend.cpp +++ b/src/remoteobjects/qconnection_tcpip_backend.cpp @@ -45,14 +45,15 @@ void TcpClientIo::connectToServer() { if (isOpen()) return; - QHostAddress address(url().host()); - if (address.isNull()) { - const QList<QHostAddress> addresses = QHostInfo::fromName(url().host()).addresses(); - Q_ASSERT_X(addresses.size() >= 1, Q_FUNC_INFO, url().toString().toLatin1().data()); - address = addresses.first(); - } - - m_socket->connectToHost(address, quint16(url().port())); + const QString &host = url().host(); + QHostAddress address(host); + if (address.isNull()) + address = QHostInfo::fromName(host).addresses().value(0); + + if (address.isNull()) + qWarning("connectToServer(): Failed to resolve host %s", qUtf8Printable(host)); + else + m_socket->connectToHost(address, url().port()); } bool TcpClientIo::isOpen() const |