From 8afa84a735d77982084d1fbcf69e198ddba26350 Mon Sep 17 00:00:00 2001 From: xiepengfei Date: Thu, 5 Mar 2026 11:36:13 +0800 Subject: [PATCH] fix: Fix dconfig input text not conforming to JSON standards Fix dconfig input text not conforming to JSON standards Log: Fix dconfig input text not conforming to JSON standards pms: BUG-317315 --- dconfig-center/common/helper.hpp | 29 +++++++++++++++++++ .../dde-dconfig-editor/mainwindow.cpp | 5 ++++ .../dde-dconfig-editor/oemdialog.cpp | 8 ++++- dconfig-center/dde-dconfig/main.cpp | 5 ++++ 4 files changed, 46 insertions(+), 1 deletion(-) diff --git a/dconfig-center/common/helper.hpp b/dconfig-center/common/helper.hpp index ed6dbed..96ca4a5 100644 --- a/dconfig-center/common/helper.hpp +++ b/dconfig-center/common/helper.hpp @@ -228,6 +228,35 @@ static QVariant stringToQVariant(const QString &s) return s; } +static bool validateTextInput(const QString &s, QString &errorMsg) +{ + QString trimmed = s.trimmed(); + + if (trimmed.isEmpty()) { + return true; + } + + QChar firstChar = trimmed[0]; + QChar lastChar = trimmed[trimmed.length() - 1]; + + bool looksLikeJsonObject = (firstChar == '{' && lastChar == '}'); + bool looksLikeJsonArray = (firstChar == '[' && lastChar == ']'); + + if (!looksLikeJsonObject && !looksLikeJsonArray) { + return true; + } + + QJsonParseError error; + QJsonDocument::fromJson(trimmed.toUtf8(), &error); + + if (error.error == QJsonParseError::NoError) { + return true; + } + + errorMsg = QString("Input looks like JSON format but is not valid JSON: %1").arg(error.errorString()); + return false; +} + 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 1b04967..2c02b53 100644 --- a/dconfig-center/dde-dconfig-editor/mainwindow.cpp +++ b/dconfig-center/dde-dconfig-editor/mainwindow.cpp @@ -734,6 +734,11 @@ void KeyContent::setBaseInfo(ConfigGetter *getter, const QString &language) auto widget = new DLineEdit(this); widget->setEnabled(canWrite); connect(widget, &DLineEdit::editingFinished, widget, [this, widget](){ + QString errorMsg; + if (!validateTextInput(widget->text(), errorMsg)) { + qWarning() << errorMsg; + 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..b784cee 100644 --- a/dconfig-center/dde-dconfig-editor/oemdialog.cpp +++ b/dconfig-center/dde-dconfig-editor/oemdialog.cpp @@ -391,7 +391,13 @@ QWidget *OEMDialog::getItemWidget(ConfigGetter *getter, DStandardItem *item) auto widget = new DLineEdit(); widget->setText(qvariantToString(v)); widget->setEnabled(canWrite); - connect(widget, &DLineEdit::textChanged, widget, [this, item](const QString &text){ + connect(widget, &DLineEdit::editingFinished, widget, [this, widget, item](){ + QString text = widget->text(); + QString errorMsg; + if (!validateTextInput(text, errorMsg)) { + qWarning() << errorMsg; + 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..5f1e97b 100644 --- a/dconfig-center/dde-dconfig/main.cpp +++ b/dconfig-center/dde-dconfig/main.cpp @@ -292,6 +292,11 @@ int CommandManager::setCommand() #endif manager->setValue(key, value.toDouble()); } else { + QString errorMsg; + if (!validateTextInput(value, errorMsg)) { + outpuSTDError(errorMsg); + return 1; + } manager->setValue(key, stringToQVariant(value)); } } else {