diff --git a/dconfig-center/common/helper.hpp b/dconfig-center/common/helper.hpp index ed6dbed..8b9d8f6 100644 --- a/dconfig-center/common/helper.hpp +++ b/dconfig-center/common/helper.hpp @@ -228,6 +228,13 @@ static QVariant stringToQVariant(const QString &s) return s; } +static bool isValidTextJsonValue(const QString &s) +{ + QJsonParseError error; + QJsonDocument::fromJson(s.toUtf8(), &error); + return error.error == QJsonParseError::NoError; +} + static QString qvariantToCmd(const QVariant &v) { auto stringValue = qvariantToStringCompact(v); diff --git a/dconfig-center/dde-dconfig-editor/mainwindow.cpp b/dconfig-center/dde-dconfig-editor/mainwindow.cpp index 295a1db..231b278 100644 --- a/dconfig-center/dde-dconfig-editor/mainwindow.cpp +++ b/dconfig-center/dde-dconfig-editor/mainwindow.cpp @@ -722,6 +722,10 @@ void KeyContent::setBaseInfo(ConfigGetter *getter, const QString &language) auto widget = new DLineEdit(this); widget->setEnabled(canWrite); connect(widget, &DLineEdit::editingFinished, widget, [this, widget](){ + if (!isValidTextJsonValue(widget->text())) { + qWarning() << "invalid json value" << widget->text(); + return; + } widget->clearFocus(); emit valueChanged(stringToQVariant(widget->text())); }); diff --git a/dconfig-center/dde-dconfig-editor/oemdialog.cpp b/dconfig-center/dde-dconfig-editor/oemdialog.cpp index 01965d2..17c7b7e 100644 --- a/dconfig-center/dde-dconfig-editor/oemdialog.cpp +++ b/dconfig-center/dde-dconfig-editor/oemdialog.cpp @@ -392,6 +392,10 @@ QWidget *OEMDialog::getItemWidget(ConfigGetter *getter, DStandardItem *item) widget->setText(qvariantToString(v)); widget->setEnabled(canWrite); connect(widget, &DLineEdit::textChanged, widget, [this, item](const QString &text){ + if (!isValidTextJsonValue(text)) { + qWarning() << "invalid json value" << text; + return; + } item->setData(stringToQVariant(text), ValueRole); treeItemChanged(item); }); diff --git a/dconfig-center/dde-dconfig/main.cpp b/dconfig-center/dde-dconfig/main.cpp index 8de0774..2e4defa 100644 --- a/dconfig-center/dde-dconfig/main.cpp +++ b/dconfig-center/dde-dconfig/main.cpp @@ -292,6 +292,10 @@ int CommandManager::setCommand() #endif manager->setValue(key, value.toDouble()); } else { + if (!isValidTextJsonValue(value)) { + outpuSTDError(QString("the value:[%1] is not a valid json text.").arg(value)); + return 1; + } manager->setValue(key, stringToQVariant(value)); } } else {