diff options
author | V3n3RiX <venerix@redcorelinux.org> | 2021-01-08 11:28:34 +0000 |
---|---|---|
committer | V3n3RiX <venerix@redcorelinux.org> | 2021-01-08 11:28:34 +0000 |
commit | 24fd814c326e282c4321965c31f341dad77e270d (patch) | |
tree | 033d63b33c21a3209964ab56005bb9bdd523630d /kde-apps/ark/files | |
parent | 129160ec854dca4c3fedb5bcfbcb56930371da0f (diff) |
gentoo resync : 08.01.2021
Diffstat (limited to 'kde-apps/ark/files')
-rw-r--r-- | kde-apps/ark/files/ark-20.12.1-runtime-crash.patch | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/kde-apps/ark/files/ark-20.12.1-runtime-crash.patch b/kde-apps/ark/files/ark-20.12.1-runtime-crash.patch new file mode 100644 index 000000000000..9ee6c7b93b9f --- /dev/null +++ b/kde-apps/ark/files/ark-20.12.1-runtime-crash.patch @@ -0,0 +1,60 @@ +From a41e69b30cc07dd758849f8685d322150459e4f1 Mon Sep 17 00:00:00 2001 +From: Elvis Angelaccio <elvis.angelaccio@kde.org> +Date: Tue, 5 Jan 2021 21:50:34 +0100 +Subject: [PATCH] Fix crash after closing the window while loading a TAR + archive + +A first problem was in LibarchivePlugin::list() not checking +isInterruptionRequested() after the while loop. It was wrongly calling +emitCorruptArchive() instead of aborting as requested. + +But according to the stacktrace, the actual crash seemed to be caused by +the for() loop over qAsConst(m_jobs): + + #0 0x00007ffff5f6a023 in QHashData::nextNode(QHashData::Node*) () from /usr/lib/libQt5Core.so.5 + #1 0x00007fffe1dcb2ec in QHash<KJob*, QHashDummyValue>::const_iterator::operator++ (this=0x7fffffffc4d0) at /usr/include/qt/QtCore/qhash.h:426 + #2 0x00007fffe1dcadac in QSet<KJob*>::const_iterator::operator++ (this=0x7fffffffc4d0) at /usr/include/qt/QtCore/qset.h:174 + #3 0x00007fffe1dca17e in JobTracker::~JobTracker (this=0x555555c319c0) at ../part/jobtracker.cpp:41 + +Porting to QSetIterator fixes the crash. + +BUG: 410092 +FIXED-IN: 20.12.2 +--- + part/jobtracker.cpp | 4 +++- + plugins/libarchive/libarchiveplugin.cpp | 4 ++++ + 2 files changed, 7 insertions(+), 1 deletion(-) + +diff --git a/part/jobtracker.cpp b/part/jobtracker.cpp +index e11e402d..a7a57fef 100644 +--- a/part/jobtracker.cpp ++++ b/part/jobtracker.cpp +@@ -38,7 +38,9 @@ JobTracker::JobTracker(QWidget *parent) + + JobTracker::~JobTracker() + { +- for (KJob *job : qAsConst(m_jobs)) { ++ QSetIterator<KJob *> it(m_jobs); ++ while (it.hasNext()) { ++ auto job = it.next(); + job->kill(); + } + } +diff --git a/plugins/libarchive/libarchiveplugin.cpp b/plugins/libarchive/libarchiveplugin.cpp +index d2c0d7e1..8a6af526 100644 +--- a/plugins/libarchive/libarchiveplugin.cpp ++++ b/plugins/libarchive/libarchiveplugin.cpp +@@ -113,6 +113,10 @@ bool LibarchivePlugin::list() + } + } + ++ if (QThread::currentThread()->isInterruptionRequested()) { ++ return false; ++ } ++ + if (result != ARCHIVE_EOF) { + qCCritical(ARK) << "Error while reading archive:" + << result +-- +GitLab + |