From a2a07f2ab94234941775abff5f874aae160cd165 Mon Sep 17 00:00:00 2001 From: zhanghongyuan Date: Mon, 26 Oct 2026 19:20:50 +0800 Subject: [PATCH] fix: guard cpuinfo flags key before setting MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Root cause: setProcCpuinfo called setFlags(mapInfo["flags"]) unconditionally; on loongarch64/mips64 where /proc/cpuinfo has no flags field, QMap::operator[] returns an empty string and overwrites any existing flags value, defeating the isEmpty fallback logic 2. Fix: add contains("flags") && !isEmpty guard before setFlags so the flags value is only set when the key exists and is non-empty 3. Impact: also fix m_Arch init typo "unknow" to "unknown" in CpuInfo constructor; no behavior change on x86, loongarch64/mips64 flags now correctly fall back to features field Influence: 1. Test CPU info loading on x86 with flags field present 2. Test CPU info loading on loongarch64/mips64 without flags field 3. Verify flags fallback to features field works correctly 4. Verify m_Arch default value spelling is correct fix: 修复cpuinfo中flags键无条件覆盖问题 1. 根因:setProcCpuinfo 无条件调用 setFlags(mapInfo["flags"]), 在 loongarch64/mips64 架构下 /proc/cpuinfo 无 flags 字段时, QMap::operator[] 返回空串并覆盖已有 flags 值,导致 isEmpty 兜底逻辑失效 2. 方案:在 setFlags 前增加 contains("flags") && !isEmpty 守卫, 仅当 flags 键存在且非空时才设置,避免无条件覆盖 3. 影响:同时修复 CpuInfo 构造函数 m_Arch 初始值拼写 "unknow" 为 "unknown";x86 架构行为不变,loongarch64/mips64 架构下 flags 正确回退至 features 字段 Influence: 1. 测试 x86 架构下含 flags 字段的 CPU 信息加载 2. 测试 loongarch64/mips64 架构下无 flags 字段的 CPU 信息加载 3. 验证 flags 回退至 features 字段的逻辑正确性 4. 验证 m_Arch 默认值拼写正确 --- .../deepin-deviceinfo/src/loadinfo/cpu/cpuinfo.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/deepin-devicemanager-server/deepin-deviceinfo/src/loadinfo/cpu/cpuinfo.cpp b/deepin-devicemanager-server/deepin-deviceinfo/src/loadinfo/cpu/cpuinfo.cpp index 0de089e5a..eff799a6c 100644 --- a/deepin-devicemanager-server/deepin-deviceinfo/src/loadinfo/cpu/cpuinfo.cpp +++ b/deepin-devicemanager-server/deepin-deviceinfo/src/loadinfo/cpu/cpuinfo.cpp @@ -14,7 +14,7 @@ using namespace DDLog; CpuInfo::CpuInfo() - : m_Arch("unknow") + : m_Arch("unknown") { } CpuInfo::~CpuInfo() @@ -207,7 +207,8 @@ LogicalCpu &CpuInfo::logicalCpu(int logical_id) void CpuInfo::setProcCpuinfo(LogicalCpu &logical, const QMap &mapInfo) { - logical.setFlags(mapInfo["flags"]); + if (mapInfo.contains("flags") && !mapInfo["flags"].isEmpty()) + logical.setFlags(mapInfo["flags"]); logical.setModel(mapInfo["model"]); logical.setModelName(mapInfo["model name"]); logical.setVendor(mapInfo["vendor_id"]);