summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIvan Solovev <ivan.solovev@qt.io>2021-12-03 13:35:52 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-12-10 21:51:54 +0000
commita6f5b79169991ffde38643d7b1a04d6a9de137bf (patch)
tree55bcf5352e283345fc3f3aedeae3c944db2e8587
parent6f7961e6da5d96aefe65256774b3b67faa247c20 (diff)
QBluetoothSocket Windows: check that host info is available
If we try to query local or remote socket info (name, address, port) before the connection is actually established, WinAPI will return a null instance of HostInfo for both local and remote hosts. This patch adds checks that these objects are not nullptrs before extracting data from them. Change-Id: I137f1270c1c7d95a1935cc8565cda6c9f7814292 Reviewed-by: Alex Blasche <alexander.blasche@qt.io> (cherry picked from commit 45f9e9fcb054c28bc59f6cc480eb08e9b13e5f0f) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/bluetooth/qbluetoothsocket_winrt.cpp33
1 files changed, 21 insertions, 12 deletions
diff --git a/src/bluetooth/qbluetoothsocket_winrt.cpp b/src/bluetooth/qbluetoothsocket_winrt.cpp
index dc2da4ca..f542829b 100644
--- a/src/bluetooth/qbluetoothsocket_winrt.cpp
+++ b/src/bluetooth/qbluetoothsocket_winrt.cpp
@@ -599,10 +599,13 @@ QBluetoothAddress QBluetoothSocketPrivateWinRT::localAddress() const
ComPtr<IHostName> localHost;
hr = info->get_LocalAddress(&localHost);
Q_ASSERT_SUCCEEDED(hr);
- HString localAddress;
- hr = localHost->get_CanonicalName(localAddress.GetAddressOf());
- Q_ASSERT_SUCCEEDED(hr);
- return QBluetoothAddress(fromWinApiAddress(std::move(localAddress)));
+ if (localHost) {
+ HString localAddress;
+ hr = localHost->get_CanonicalName(localAddress.GetAddressOf());
+ Q_ASSERT_SUCCEEDED(hr);
+ return QBluetoothAddress(fromWinApiAddress(std::move(localAddress)));
+ }
+ return QBluetoothAddress();
}
quint16 QBluetoothSocketPrivateWinRT::localPort() const
@@ -638,10 +641,13 @@ QString QBluetoothSocketPrivateWinRT::peerName() const
ComPtr<IHostName> remoteHost;
hr = info->get_RemoteHostName(&remoteHost);
Q_ASSERT_SUCCEEDED(hr);
- HString remoteHostName;
- hr = remoteHost->get_DisplayName(remoteHostName.GetAddressOf());
- Q_ASSERT_SUCCEEDED(hr);
- return qt_QStringFromHString(remoteHostName);
+ if (remoteHost) {
+ HString remoteHostName;
+ hr = remoteHost->get_DisplayName(remoteHostName.GetAddressOf());
+ Q_ASSERT_SUCCEEDED(hr);
+ return qt_QStringFromHString(remoteHostName);
+ }
+ return {};
}
QBluetoothAddress QBluetoothSocketPrivateWinRT::peerAddress() const
@@ -656,10 +662,13 @@ QBluetoothAddress QBluetoothSocketPrivateWinRT::peerAddress() const
ComPtr<IHostName> remoteHost;
hr = info->get_RemoteAddress(&remoteHost);
Q_ASSERT_SUCCEEDED(hr);
- HString remoteAddress;
- hr = remoteHost->get_CanonicalName(remoteAddress.GetAddressOf());
- Q_ASSERT_SUCCEEDED(hr);
- return QBluetoothAddress(fromWinApiAddress(std::move(remoteAddress)));
+ if (remoteHost) {
+ HString remoteAddress;
+ hr = remoteHost->get_CanonicalName(remoteAddress.GetAddressOf());
+ Q_ASSERT_SUCCEEDED(hr);
+ return QBluetoothAddress(fromWinApiAddress(std::move(remoteAddress)));
+ }
+ return QBluetoothAddress();
}
quint16 QBluetoothSocketPrivateWinRT::peerPort() const