From 949a9ddcf12dca7c425f8e887c148daa99f8cbf3 Mon Sep 17 00:00:00 2001 From: gongheng Date: Fri, 20 Mar 2026 20:24:58 +0800 Subject: [PATCH] Fix: improve QProcess usage for Qt6 compatibility - Refactored QProcess::start() calls in parseEDID() to use the modern API by separating program name and arguments instead of shell string concatenation. - Added return value validation for waitForFinished() to handle process execution failures gracefully. - Applied QString::fromLocal8Bit() to standard output reading to ensure proper text encoding handling. - These changes improve code robustness, security (avoiding shell injection risks), and compatibility with Qt6 best practices. Log: fix issue Bug: https://pms.uniontech.com/bug-view-353603.html --- deepin-devicemanager/src/Tool/commontools.cpp | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/deepin-devicemanager/src/Tool/commontools.cpp b/deepin-devicemanager/src/Tool/commontools.cpp index 2ee8787d..e16c58b6 100644 --- a/deepin-devicemanager/src/Tool/commontools.cpp +++ b/deepin-devicemanager/src/Tool/commontools.cpp @@ -198,12 +198,17 @@ void CommonTools::parseEDID(const QStringList &allEDIDS, const QString &input, b QString edidStr; if (isHW) { QProcess process; - process.start(QString("hexdump %1").arg(edid)); - process.waitForFinished(-1); + process.start("hexdump", QStringList() << edid); + if (!process.waitForFinished(3000)) { + qCritical() << "Failed to hexdump edid file!"; + continue; + } - QString deviceInfo = process.readAllStandardOutput(); - if (deviceInfo.isEmpty()) + QString deviceInfo = QString::fromLocal8Bit(process.readAllStandardOutput()); + if (deviceInfo.isEmpty()) { + qWarning() << "The edid file is empty! " << edid; continue; + } QStringList lines = deviceInfo.split("\n"); for (auto line:lines) { @@ -218,11 +223,16 @@ void CommonTools::parseEDID(const QStringList &allEDIDS, const QString &input, b } } else { QProcess process; - process.start(QString("hexdump -C %1").arg(edid)); - process.waitForFinished(-1); - QString deviceInfo = process.readAllStandardOutput(); - if (deviceInfo.isEmpty()) + process.start("hexdump", QStringList() << "-C" << edid); + if (!process.waitForFinished(3000)) { + qCritical() << "Failed to hexdump edid file!"; continue; + } + QString deviceInfo = QString::fromLocal8Bit(process.readAllStandardOutput()); + if (deviceInfo.isEmpty()) { + qWarning() << "The edid file is empty! " << edid; + continue; + } QStringList lines = deviceInfo.split("\n"); for (auto line: lines) {