From d86af6e4b63b1038c92a61ae29dcada787c49c41 Mon Sep 17 00:00:00 2001 From: Lorn Potter Date: Thu, 15 May 2014 09:07:07 +1000 Subject: [PATCH] fix crash in connman bearer backend when accessing null objects Change-Id: Ib199b4093d86d1596b630223d0734171ba0d82c5 Reviewed-by: Lorn Potter Reviewed-by: Konstantin Ritt --- src/plugins/bearer/connman/qconnmanengine.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/plugins/bearer/connman/qconnmanengine.cpp b/src/plugins/bearer/connman/qconnmanengine.cpp index 09034964729..5e3aaae0729 100644 --- a/src/plugins/bearer/connman/qconnmanengine.cpp +++ b/src/plugins/bearer/connman/qconnmanengine.cpp @@ -186,7 +186,7 @@ void QConnmanEngine::connectToId(const QString &id) QConnmanServiceInterface *serv = connmanServiceInterfaces.value(id); - if (!serv->isValid()) { + if (!serv || !serv->isValid()) { emit connectionError(id, QBearerEngineImpl::InterfaceLookupError); } else { if (serv->type() == QLatin1String("cellular")) { @@ -211,7 +211,7 @@ void QConnmanEngine::disconnectFromId(const QString &id) QMutexLocker locker(&mutex); QConnmanServiceInterface *serv = connmanServiceInterfaces.value(id); - if (!serv->isValid()) { + if (!serv || !serv->isValid()) { emit connectionError(id, DisconnectionError); } else { serv->disconnect(); @@ -263,6 +263,8 @@ QNetworkSession::State QConnmanEngine::sessionStateForId(const QString &id) QString service = id; QConnmanServiceInterface *serv = connmanServiceInterfaces.value(service); + if (!serv) + return QNetworkSession::Invalid; QString servState = serv->state(); @@ -368,6 +370,8 @@ void QConnmanEngine::serviceStateChanged(const QString &state) void QConnmanEngine::configurationChange(QConnmanServiceInterface *serv) { + if (!serv) + return; QMutexLocker locker(&mutex); QString id = serv->path(); @@ -409,8 +413,10 @@ QNetworkConfiguration::StateFlags QConnmanEngine::getStateForService(const QStri { QMutexLocker locker(&mutex); QConnmanServiceInterface *serv = connmanServiceInterfaces.value(service); - QString state = serv->state(); + if (!serv) + return QNetworkConfiguration::Undefined; + QString state = serv->state(); QNetworkConfiguration::StateFlags flag = QNetworkConfiguration::Defined; if (serv->type() == QLatin1String("cellular")) {