From a2d76a87c03792031e149546170c7414e458380b Mon Sep 17 00:00:00 2001 From: renbin Date: Thu, 13 Jul 2023 15:29:55 +0800 Subject: [PATCH] fix: Read QLatin1String returned from QApt may be freed. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在 Realse 模式下,某些场景后续调用 QLatin1String 时可能访问失败, 内存被释放,修改为获取数据时即拷贝数据。 Log: 读取从 QApt 返回的 QLatin1String 时可能被释放 Influence: CheckConflict --- src/deb-installer/manager/packagesmanager.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/deb-installer/manager/packagesmanager.cpp b/src/deb-installer/manager/packagesmanager.cpp index a9ba3969..d4a29e7a 100644 --- a/src/deb-installer/manager/packagesmanager.cpp +++ b/src/deb-installer/manager/packagesmanager.cpp @@ -402,7 +402,7 @@ const ConflictResult PackagesManager::isConflictSatisfy(const QString &arch, Pac const ConflictResult PackagesManager::isInstalledConflict(const QString &packageName, const QString &packageVersion, const QString &packageArch) { - static QList> sysConflicts; + static QList> sysConflicts; if (sysConflicts.isEmpty()) { Backend *backend = PackageAnalyzer::instance().backendPtr(); @@ -421,7 +421,9 @@ const ConflictResult PackagesManager::isInstalledConflict(const QString &package for (const auto &conflict_list : conflicts) for (const auto &conflict : conflict_list) { - sysConflicts << QPair(pkg->name(), conflict); + // FIXME: 在 Realse 模式下,某些场景后续调用 QLatin1String 时可能访问失败(内存被释放)! + // 临时修改为拷贝数据。 + sysConflicts << QPair(pkg->name(), conflict); } pkg = nullptr; }