From a03687ae2263ca67c0e0e356a68c85e6972a974d Mon Sep 17 00:00:00 2001 From: Jakub Adam Date: Mon, 2 Jun 2014 13:53:54 +0200 Subject: [PATCH] Eschew use of QStringLiteral in connman bearer plugin The string data QStringLiteral generates is stored in the read-only segment of the compiled object file. However, libqconnmanbearer.so can be dynamically unloaded from memory and when this happens, the data may still be referenced by QStrings e.g. inside Qt DBus. Operation with such string will lead to application crash because of invalid memory access. For this reason change all instances of QStringLiteral to QLatin1String, with an exception of temporaries used for string comparison, which can't be referenced from outside of the library. This problem was observed in crash-reporter-autouploader. --- .../plugins/bearer/connman/qconnmanengine.cpp | 8 +- .../bearer/connman/qconnmanservice_linux.cpp | 96 +++++++++---------- .../bearer/connman/qofonoservice_linux.cpp | 36 +++---- 3 files changed, 70 insertions(+), 70 deletions(-) diff --git a/qtbase/src/plugins/bearer/connman/qconnmanengine.cpp b/qtbase/src/plugins/bearer/connman/qconnmanengine.cpp index 4813f4f13a..d3ed6bdd36 100644 --- a/qtbase/src/plugins/bearer/connman/qconnmanengine.cpp +++ b/qtbase/src/plugins/bearer/connman/qconnmanengine.cpp @@ -104,7 +104,7 @@ void QConnmanEngine::initialize() addServiceConfiguration(servPath); } Q_EMIT updateCompleted(); - QSettings confFile(QStringLiteral("nemomobile"),QStringLiteral("connectionagent")); + QSettings confFile(QLatin1String("nemomobile"), QLatin1String("connectionagent")); inotifyFileDescriptor = ::inotify_init(); inotifyWatcher = ::inotify_add_watch(inotifyFileDescriptor, QFile::encodeName(confFile.fileName()), IN_MODIFY); @@ -572,9 +572,9 @@ bool QConnmanEngine::requiresPolling() const bool QConnmanEngine::isAlwaysAskRoaming() { - QSettings confFile(QStringLiteral("nemomobile"),QStringLiteral("connectionagent")); - confFile.beginGroup(QStringLiteral("Connectionagent")); - return confFile.value(QStringLiteral("askForRoaming")).toBool(); + QSettings confFile(QLatin1String("nemomobile"), QLatin1String("connectionagent")); + confFile.beginGroup(QLatin1String("Connectionagent")); + return confFile.value(QLatin1String("askForRoaming")).toBool(); } void QConnmanEngine::reEvaluateCellular() diff --git a/qtbase/src/plugins/bearer/connman/qconnmanservice_linux.cpp b/qtbase/src/plugins/bearer/connman/qconnmanservice_linux.cpp index 46b24f77dd..8813d8749e 100644 --- a/qtbase/src/plugins/bearer/connman/qconnmanservice_linux.cpp +++ b/qtbase/src/plugins/bearer/connman/qconnmanservice_linux.cpp @@ -75,8 +75,8 @@ const QDBusArgument &operator>>(const QDBusArgument &argument, ConnmanMap &map) } QConnmanManagerInterface::QConnmanManagerInterface( QObject *parent) - : QDBusAbstractInterface(QStringLiteral(CONNMAN_SERVICE), - QStringLiteral(CONNMAN_MANAGER_PATH), + : QDBusAbstractInterface(QLatin1String(CONNMAN_SERVICE), + QLatin1String(CONNMAN_MANAGER_PATH), CONNMAN_MANAGER_INTERFACE, QDBusConnection::systemBus(), parent) { @@ -90,23 +90,23 @@ QConnmanManagerInterface::QConnmanManagerInterface( QObject *parent) QObject::connect(watcher,SIGNAL(finished(QDBusPendingCallWatcher*)), this, SLOT(propertiesReply(QDBusPendingCallWatcher*))); - QDBusConnection::systemBus().connect(QStringLiteral(CONNMAN_SERVICE), - QStringLiteral(CONNMAN_MANAGER_PATH), - QStringLiteral(CONNMAN_SERVICE_INTERFACE), - QStringLiteral("PropertyChanged"), + QDBusConnection::systemBus().connect(QLatin1String(CONNMAN_SERVICE), + QLatin1String(CONNMAN_MANAGER_PATH), + QLatin1String(CONNMAN_SERVICE_INTERFACE), + QLatin1String("PropertyChanged"), this,SLOT(changedProperty(QString,QDBusVariant))); - QDBusConnection::systemBus().connect(QStringLiteral(CONNMAN_SERVICE), - QStringLiteral(CONNMAN_MANAGER_PATH), - QStringLiteral(CONNMAN_SERVICE_INTERFACE), - QStringLiteral("TechnologyAdded"), + QDBusConnection::systemBus().connect(QLatin1String(CONNMAN_SERVICE), + QLatin1String(CONNMAN_MANAGER_PATH), + QLatin1String(CONNMAN_SERVICE_INTERFACE), + QLatin1String("TechnologyAdded"), this,SLOT(technologyAdded(QDBusObjectPath,QVariantMap))); - QDBusConnection::systemBus().connect(QStringLiteral(CONNMAN_SERVICE), - QStringLiteral(CONNMAN_MANAGER_PATH), - QStringLiteral(CONNMAN_SERVICE_INTERFACE), - QStringLiteral("TechnologyRemoved"), + QDBusConnection::systemBus().connect(QLatin1String(CONNMAN_SERVICE), + QLatin1String(CONNMAN_MANAGER_PATH), + QLatin1String(CONNMAN_SERVICE_INTERFACE), + QLatin1String("TechnologyRemoved"), this,SLOT(technologyRemoved(QDBusObjectPath))); QList argumentList2; @@ -160,10 +160,10 @@ void QConnmanManagerInterface::connectNotify(const QMetaMethod &signal) { static const QMetaMethod propertyChangedSignal = QMetaMethod::fromSignal(&QConnmanManagerInterface::propertyChanged); if (signal == propertyChangedSignal) { - if (!connection().connect(QStringLiteral(CONNMAN_SERVICE), - QStringLiteral(CONNMAN_MANAGER_PATH), - QStringLiteral(CONNMAN_MANAGER_INTERFACE), - QStringLiteral("PropertyChanged"), + if (!connection().connect(QLatin1String(CONNMAN_SERVICE), + QLatin1String(CONNMAN_MANAGER_PATH), + QLatin1String(CONNMAN_MANAGER_INTERFACE), + QLatin1String("PropertyChanged"), this,SIGNAL(propertyChanged(QString,QDBusVariant)))) { qWarning() << "PropertyChanged not connected"; } @@ -171,10 +171,10 @@ void QConnmanManagerInterface::connectNotify(const QMetaMethod &signal) static const QMetaMethod servicesChangedSignal = QMetaMethod::fromSignal(&QConnmanManagerInterface::servicesChanged); if (signal == servicesChangedSignal) { - if (!connection().connect(QStringLiteral(CONNMAN_SERVICE), - QStringLiteral(CONNMAN_MANAGER_PATH), - QStringLiteral(CONNMAN_MANAGER_INTERFACE), - QStringLiteral("ServicesChanged"), + if (!connection().connect(QLatin1String(CONNMAN_SERVICE), + QLatin1String(CONNMAN_MANAGER_PATH), + QLatin1String(CONNMAN_MANAGER_INTERFACE), + QLatin1String("ServicesChanged"), this,SLOT(onServicesChanged(ConnmanMapList, QList)))) { qWarning() << "servicesChanged not connected"; } @@ -214,12 +214,12 @@ QVariantMap QConnmanManagerInterface::getProperties() QString QConnmanManagerInterface::getState() { - return getProperty(QStringLiteral("State")).toString(); + return getProperty(QLatin1String("State")).toString(); } bool QConnmanManagerInterface::getOfflineMode() { - QVariant var = getProperty(QStringLiteral("OfflineMode")); + QVariant var = getProperty(QLatin1String("OfflineMode")); return qdbus_cast(var); } @@ -283,7 +283,7 @@ void QConnmanManagerInterface::technologyRemoved(const QDBusObjectPath &path) } QConnmanServiceInterface::QConnmanServiceInterface(const QString &dbusPathName,QObject *parent) - : QDBusAbstractInterface(QStringLiteral(CONNMAN_SERVICE), + : QDBusAbstractInterface(QLatin1String(CONNMAN_SERVICE), dbusPathName, CONNMAN_SERVICE_INTERFACE, QDBusConnection::systemBus(), parent) @@ -296,10 +296,10 @@ QConnmanServiceInterface::QConnmanServiceInterface(const QString &dbusPathName,Q QObject::connect(watcher,SIGNAL(finished(QDBusPendingCallWatcher*)), this, SLOT(propertiesReply(QDBusPendingCallWatcher*))); - QDBusConnection::systemBus().connect(QStringLiteral(CONNMAN_SERVICE), + QDBusConnection::systemBus().connect(QLatin1String(CONNMAN_SERVICE), path(), - QStringLiteral(CONNMAN_SERVICE_INTERFACE), - QStringLiteral("PropertyChanged"), + QLatin1String(CONNMAN_SERVICE_INTERFACE), + QLatin1String("PropertyChanged"), this,SLOT(changedProperty(QString,QDBusVariant))); } @@ -335,10 +335,10 @@ void QConnmanServiceInterface::connectNotify(const QMetaMethod &signal) { static const QMetaMethod propertyChangedSignal = QMetaMethod::fromSignal(&QConnmanServiceInterface::propertyChanged); if (signal == propertyChangedSignal) { - QDBusConnection::systemBus().connect(QStringLiteral(CONNMAN_SERVICE), + QDBusConnection::systemBus().connect(QLatin1String(CONNMAN_SERVICE), path(), - QStringLiteral(CONNMAN_SERVICE_INTERFACE), - QStringLiteral("PropertyChanged"), + QLatin1String(CONNMAN_SERVICE_INTERFACE), + QLatin1String("PropertyChanged"), this,SIGNAL(propertyChanged(QString,QDBusVariant))); } } @@ -376,79 +376,79 @@ void QConnmanServiceInterface::remove() // properties QString QConnmanServiceInterface::state() { - QVariant var = getProperty(QStringLiteral("State")); + QVariant var = getProperty(QLatin1String("State")); return qdbus_cast(var); } QString QConnmanServiceInterface::lastError() { - QVariant var = getProperty(QStringLiteral("Error")); + QVariant var = getProperty(QLatin1String("Error")); return qdbus_cast(var); } QString QConnmanServiceInterface::name() { - QVariant var = getProperty(QStringLiteral("Name")); + QVariant var = getProperty(QLatin1String("Name")); return qdbus_cast(var); } QString QConnmanServiceInterface::type() { - QVariant var = getProperty(QStringLiteral("Type")); + QVariant var = getProperty(QLatin1String("Type")); return qdbus_cast(var); } QString QConnmanServiceInterface::security() { - QVariant var = getProperty(QStringLiteral("Security")); + QVariant var = getProperty(QLatin1String("Security")); return qdbus_cast(var); } bool QConnmanServiceInterface::favorite() { - QVariant var = getProperty(QStringLiteral("Favorite")); + QVariant var = getProperty(QLatin1String("Favorite")); return qdbus_cast(var); } bool QConnmanServiceInterface::autoConnect() { - QVariant var = getProperty(QStringLiteral("AutoConnect")); + QVariant var = getProperty(QLatin1String("AutoConnect")); return qdbus_cast(var); } bool QConnmanServiceInterface::roaming() { - QVariant var = getProperty(QStringLiteral("Roaming")); + QVariant var = getProperty(QLatin1String("Roaming")); return qdbus_cast(var); } QVariantMap QConnmanServiceInterface::ethernet() { - QVariant var = getProperty(QStringLiteral("Ethernet")); + QVariant var = getProperty(QLatin1String("Ethernet")); return qdbus_cast(var); } QString QConnmanServiceInterface::serviceInterface() { QVariantMap map = ethernet(); - return map.value(QStringLiteral("Interface")).toString(); + return map.value(QLatin1String("Interface")).toString(); } bool QConnmanServiceInterface::isOfflineMode() { - QVariant var = getProperty(QStringLiteral("OfflineMode")); + QVariant var = getProperty(QLatin1String("OfflineMode")); return qdbus_cast(var); } QStringList QConnmanServiceInterface::services() { - QVariant var = getProperty(QStringLiteral("Services")); + QVariant var = getProperty(QLatin1String("Services")); return qdbus_cast(var); } ////////////////////////// QConnmanTechnologyInterface::QConnmanTechnologyInterface(const QString &dbusPathName,QObject *parent) - : QDBusAbstractInterface(QStringLiteral(CONNMAN_SERVICE), + : QDBusAbstractInterface(QLatin1String(CONNMAN_SERVICE), dbusPathName, CONNMAN_TECHNOLOGY_INTERFACE, QDBusConnection::systemBus(), parent) @@ -463,10 +463,10 @@ void QConnmanTechnologyInterface::connectNotify(const QMetaMethod &signal) { static const QMetaMethod propertyChangedSignal = QMetaMethod::fromSignal(&QConnmanTechnologyInterface::propertyChanged); if (signal == propertyChangedSignal) { - QDBusConnection::systemBus().connect(QStringLiteral(CONNMAN_SERVICE), + QDBusConnection::systemBus().connect(QLatin1String(CONNMAN_SERVICE), path(), - QStringLiteral(CONNMAN_TECHNOLOGY_INTERFACE), - QStringLiteral("PropertyChanged"), + QLatin1String(CONNMAN_TECHNOLOGY_INTERFACE), + QLatin1String("PropertyChanged"), this,SIGNAL(propertyChanged(QString,QDBusVariant))); } } @@ -491,7 +491,7 @@ QVariant QConnmanTechnologyInterface::getProperty(const QString &property) QString QConnmanTechnologyInterface::type() { - QVariant var = getProperty(QStringLiteral("Type")); + QVariant var = getProperty(QLatin1String("Type")); return qdbus_cast(var); } diff --git a/qtbase/src/plugins/bearer/connman/qofonoservice_linux.cpp b/qtbase/src/plugins/bearer/connman/qofonoservice_linux.cpp index f5da52a341..9c0a2d673a 100644 --- a/qtbase/src/plugins/bearer/connman/qofonoservice_linux.cpp +++ b/qtbase/src/plugins/bearer/connman/qofonoservice_linux.cpp @@ -75,23 +75,23 @@ const QDBusArgument &operator>>(const QDBusArgument &argument, ObjectPathPropert QT_BEGIN_NAMESPACE QOfonoManagerInterface::QOfonoManagerInterface( QObject *parent) - : QDBusAbstractInterface(QStringLiteral(OFONO_SERVICE), - QStringLiteral(OFONO_MANAGER_PATH), + : QDBusAbstractInterface(QLatin1String(OFONO_SERVICE), + QLatin1String(OFONO_MANAGER_PATH), OFONO_MANAGER_INTERFACE, QDBusConnection::systemBus(), parent) { qDBusRegisterMetaType(); qDBusRegisterMetaType(); - QDBusConnection::systemBus().connect(QStringLiteral(OFONO_SERVICE), - QStringLiteral(OFONO_MANAGER_PATH), - QStringLiteral(OFONO_MANAGER_INTERFACE), - QStringLiteral("ModemAdded"), + QDBusConnection::systemBus().connect(QLatin1String(OFONO_SERVICE), + QLatin1String(OFONO_MANAGER_PATH), + QLatin1String(OFONO_MANAGER_INTERFACE), + QLatin1String("ModemAdded"), this,SLOT(modemAdded(QDBusObjectPath, QVariantMap))); - QDBusConnection::systemBus().connect(QStringLiteral(OFONO_SERVICE), - QStringLiteral(OFONO_MANAGER_PATH), - QStringLiteral(OFONO_MANAGER_INTERFACE), - QStringLiteral("ModemRemoved"), + QDBusConnection::systemBus().connect(QLatin1String(OFONO_SERVICE), + QLatin1String(OFONO_MANAGER_PATH), + QLatin1String(OFONO_MANAGER_INTERFACE), + QLatin1String("ModemRemoved"), this,SLOT(modemRemoved(QDBusObjectPath))); } @@ -146,15 +146,15 @@ void QOfonoManagerInterface::modemRemoved(const QDBusObjectPath &path) QOfonoModemInterface::QOfonoModemInterface(const QString &dbusPathName, QObject *parent) - : QDBusAbstractInterface(QStringLiteral(OFONO_SERVICE), + : QDBusAbstractInterface(QLatin1String(OFONO_SERVICE), dbusPathName, OFONO_MODEM_INTERFACE, QDBusConnection::systemBus(), parent) { - QDBusConnection::systemBus().connect(QStringLiteral(OFONO_SERVICE), + QDBusConnection::systemBus().connect(QLatin1String(OFONO_SERVICE), path(), OFONO_MODEM_INTERFACE, - QStringLiteral("PropertyChanged"), + QLatin1String("PropertyChanged"), this,SLOT(propertyChanged(QString,QDBusVariant))); } @@ -169,13 +169,13 @@ void QOfonoModemInterface::propertyChanged(const QString &name,const QDBusVarian bool QOfonoModemInterface::isPowered() { - QVariant var = getProperty(QStringLiteral("Powered")); + QVariant var = getProperty(QLatin1String("Powered")); return qdbus_cast(var); } bool QOfonoModemInterface::isOnline() { - QVariant var = getProperty(QStringLiteral("Online")); + QVariant var = getProperty(QLatin1String("Online")); return qdbus_cast(var); } @@ -201,7 +201,7 @@ QVariant QOfonoModemInterface::getProperty(const QString &property) QOfonoNetworkRegistrationInterface::QOfonoNetworkRegistrationInterface(const QString &dbusPathName, QObject *parent) - : QDBusAbstractInterface(QStringLiteral(OFONO_SERVICE), + : QDBusAbstractInterface(QLatin1String(OFONO_SERVICE), dbusPathName, OFONO_NETWORK_REGISTRATION_INTERFACE, QDBusConnection::systemBus(), parent) @@ -214,7 +214,7 @@ QOfonoNetworkRegistrationInterface::~QOfonoNetworkRegistrationInterface() QString QOfonoNetworkRegistrationInterface::getTechnology() { - QVariant var = getProperty(QStringLiteral("Technology")); + QVariant var = getProperty(QLatin1String("Technology")); return qdbus_cast(var); } @@ -274,7 +274,7 @@ QStringList QOfonoDataConnectionManagerInterface::contexts() bool QOfonoDataConnectionManagerInterface::roamingAllowed() { - QVariant var = getProperty(QStringLiteral("RoamingAllowed")); + QVariant var = getProperty(QLatin1String("RoamingAllowed")); return qdbus_cast(var); }