diff options
author | Ivan Solovev <ivan.solovev@qt.io> | 2021-12-03 13:35:52 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2021-12-10 21:51:54 +0000 |
commit | a6f5b79169991ffde38643d7b1a04d6a9de137bf (patch) | |
tree | 55bcf5352e283345fc3f3aedeae3c944db2e8587 | |
parent | 6f7961e6da5d96aefe65256774b3b67faa247c20 (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.cpp | 33 |
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 |