Skip to content

Commit

Permalink
fix: Read QLatin1String returned from QApt may be freed.
Browse files Browse the repository at this point in the history
在 Realse 模式下,某些场景后续调用 QLatin1String 时可能访问失败,
内存被释放,修改为获取数据时即拷贝数据。

Log: 读取从 QApt 返回的 QLatin1String 时可能被释放
Influence: CheckConflict
  • Loading branch information
rb-union committed Jul 13, 2023
1 parent 73634fe commit a2d76a8
Showing 1 changed file with 4 additions and 2 deletions.
6 changes: 4 additions & 2 deletions src/deb-installer/manager/packagesmanager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<QPair<QLatin1String, DependencyInfo>> sysConflicts;
static QList<QPair<QString, DependencyInfo>> sysConflicts;

if (sysConflicts.isEmpty()) {
Backend *backend = PackageAnalyzer::instance().backendPtr();
Expand All @@ -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<QLatin1String, DependencyInfo>(pkg->name(), conflict);
// FIXME: 在 Realse 模式下,某些场景后续调用 QLatin1String 时可能访问失败(内存被释放)!
// 临时修改为拷贝数据。
sysConflicts << QPair<QString, DependencyInfo>(pkg->name(), conflict);
}
pkg = nullptr;
}
Expand Down

0 comments on commit a2d76a8

Please sign in to comment.