aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@qt.io>2018-09-05 13:26:51 +0200
committerTobias Hunger <tobias.hunger@qt.io>2018-09-11 14:16:58 +0000
commit7264ea001b9ebcdaf388f9b2e979b1800a625ad9 (patch)
tree9a727194a335547f79583f9b7eecbeda3ceb1191
parent88074a4aa81d844d6843cafc261dc633842fa396 (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.cpp18
-rw-r--r--src/libs/utils/environmentmodel.h2
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();