summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorMårten Nordheim <marten.nordheim@qt.io>2022-11-03 13:40:18 +0100
committerMårten Nordheim <marten.nordheim@qt.io>2022-11-04 11:54:31 +0100
commit35e54f9b7bba9ad7b1757e0b8f7d03859a694b34 (patch)
tree926e90c9c3ae36517ce2095f0337ffaa3e325295 /src/plugins
parent7000e2dd5c594dfbb9f67a9accfff14880ab537f (diff)
QNetworkInformation[Win]: Catch potential exceptions
Some Windows SDKs seem to throw an exception (sometimes?) when calling ConnectionProfile::NetworkAdapter. Catch the exception and ignore it, we would return Unknown anyway. And just in case it is needed, do the same for GetConnectionCost. This requires enabling exceptions for the plugin. Fixes: QTBUG-108156 Pick-to: 6.4 6.4.1 Change-Id: Ie6c5adb3715578aa94ef3391afae79d9aecdc5d3 Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/networkinformation/networklistmanager/CMakeLists.txt1
-rw-r--r--src/plugins/networkinformation/networklistmanager/qnetworklistmanagerevents.cpp16
2 files changed, 15 insertions, 2 deletions
diff --git a/src/plugins/networkinformation/networklistmanager/CMakeLists.txt b/src/plugins/networkinformation/networklistmanager/CMakeLists.txt
index 47f72f843b..77501d0e5c 100644
--- a/src/plugins/networkinformation/networklistmanager/CMakeLists.txt
+++ b/src/plugins/networkinformation/networklistmanager/CMakeLists.txt
@@ -6,6 +6,7 @@ qt_internal_add_plugin(QNLMNIPlugin
CLASS_NAME QNetworkListManagerNetworkInformationBackendFactory
PLUGIN_TYPE networkinformation
DEFAULT_IF WIN32 AND QT_FEATURE_networklistmanager
+ EXCEPTIONS
SOURCES
qnetworklistmanagernetworkinformationbackend.cpp
qnetworklistmanagerevents.h qnetworklistmanagerevents.cpp
diff --git a/src/plugins/networkinformation/networklistmanager/qnetworklistmanagerevents.cpp b/src/plugins/networkinformation/networklistmanager/qnetworklistmanagerevents.cpp
index db789df244..b101a17f9b 100644
--- a/src/plugins/networkinformation/networklistmanager/qnetworklistmanagerevents.cpp
+++ b/src/plugins/networkinformation/networklistmanager/qnetworklistmanagerevents.cpp
@@ -186,7 +186,12 @@ QNetworkInformation::TransportMedium getTransportMedium(const ConnectionProfile
if (profile.IsWlanConnectionProfile())
return QNetworkInformation::TransportMedium::WiFi;
- NetworkAdapter adapter = profile.NetworkAdapter();
+ NetworkAdapter adapter(nullptr);
+ try {
+ adapter = profile.NetworkAdapter();
+ } catch (...) {
+ // pass, we will return Unknown anyway
+ }
if (adapter == nullptr)
return QNetworkInformation::TransportMedium::Unknown;
@@ -209,7 +214,14 @@ QNetworkInformation::TransportMedium getTransportMedium(const ConnectionProfile
[[nodiscard]] bool getMetered(const ConnectionProfile &profile)
{
- ConnectionCost cost = profile.GetConnectionCost();
+ ConnectionCost cost(nullptr);
+ try {
+ cost = profile.GetConnectionCost();
+ } catch (...) {
+ // pass, we return false if we get an empty object back anyway
+ }
+ if (cost == nullptr)
+ return false;
NetworkCostType type = cost.NetworkCostType();
return type == NetworkCostType::Fixed || type == NetworkCostType::Variable;
}