From f54df7c4b37edd40c70cb89d3817b0bfb9a2829f Mon Sep 17 00:00:00 2001 From: gongheng Date: Fri, 20 Mar 2026 20:50:27 +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 | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/deepin-devicemanager/src/Tool/commontools.cpp b/deepin-devicemanager/src/Tool/commontools.cpp index 523938c9..b554f236 100644 --- a/deepin-devicemanager/src/Tool/commontools.cpp +++ b/deepin-devicemanager/src/Tool/commontools.cpp @@ -183,12 +183,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) { @@ -203,11 +208,17 @@ 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) {