diff options
author | Tobias Hunger <tobias.hunger@qt.io> | 2018-09-05 13:26:51 +0200 |
---|---|---|
committer | Tobias Hunger <tobias.hunger@qt.io> | 2018-09-11 14:16:58 +0000 |
commit | 7264ea001b9ebcdaf388f9b2e979b1800a625ad9 (patch) | |
tree | 9a727194a335547f79583f9b7eecbeda3ceb1191 | |
parent | 88074a4aa81d844d6843cafc261dc633842fa396 (diff) |
EnvironmentWidget: Do not accept empty keys or keys containing '='
Change-Id: I2b358a23ab3414cef38f60ffdba7af7d9c236568
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
-rw-r--r-- | src/libs/utils/environmentmodel.cpp | 18 | ||||
-rw-r--r-- | src/libs/utils/environmentmodel.h | 2 |
2 files changed, 13 insertions, 7 deletions
diff --git a/src/libs/utils/environmentmodel.cpp b/src/libs/utils/environmentmodel.cpp index 303f7cf7d2..045a6d2b65 100644 --- a/src/libs/utils/environmentmodel.cpp +++ b/src/libs/utils/environmentmodel.cpp @@ -25,6 +25,7 @@ #include "environmentmodel.h" +#include <utils/algorithm.h> #include <utils/environment.h> #include <utils/hostosinfo.h> @@ -212,6 +213,8 @@ bool EnvironmentModel::setData(const QModelIndex &index, const QVariant &value, //fail if a variable with the same name already exists const QString &newName = HostOsInfo::isWindowsHost() ? value.toString().toUpper() : value.toString(); + if (newName.isEmpty() || newName.contains('=')) + return false; // Does the new name exist already? if (d->m_resultEnvironment.hasKey(newName) || newName.isEmpty()) return false; @@ -357,17 +360,20 @@ QList<EnvironmentItem> EnvironmentModel::userChanges() const return d->m_items; } -void EnvironmentModel::setUserChanges(QList<EnvironmentItem> list) +void EnvironmentModel::setUserChanges(const QList<EnvironmentItem> &list) { + QList<EnvironmentItem> filtered = Utils::filtered(list, [](const EnvironmentItem &i) { + return i.name != "export " && !i.name.contains('='); + }); // We assume nobody is reordering the items here. - if (list == d->m_items) + if (filtered == d->m_items) return; beginResetModel(); - d->m_items = list; - for (int i = 0; i != list.size(); ++i) { - QString &name = d->m_items[i].name; + d->m_items = filtered; + for (EnvironmentItem &item : d->m_items) { + QString &name = item.name; name = name.trimmed(); - if (name.startsWith(QLatin1String("export "))) + if (name.startsWith("export ")) name = name.mid(7).trimmed(); if (d->m_baseEnvironment.osType() == OsTypeWindows) { // Environment variable names are case-insensitive under windows, but we still diff --git a/src/libs/utils/environmentmodel.h b/src/libs/utils/environmentmodel.h index 4230c82d79..db20224651 100644 --- a/src/libs/utils/environmentmodel.h +++ b/src/libs/utils/environmentmodel.h @@ -63,7 +63,7 @@ public: Environment baseEnvironment() const; void setBaseEnvironment(const Environment &env); QList<EnvironmentItem> userChanges() const; - void setUserChanges(QList<EnvironmentItem> list); + void setUserChanges(const QList<EnvironmentItem> &list); signals: void userChangesChanged(); |