summaryrefslogtreecommitdiff
path: root/kde-apps/ark/files
diff options
context:
space:
mode:
authorV3n3RiX <venerix@redcorelinux.org>2021-01-08 11:28:34 +0000
committerV3n3RiX <venerix@redcorelinux.org>2021-01-08 11:28:34 +0000
commit24fd814c326e282c4321965c31f341dad77e270d (patch)
tree033d63b33c21a3209964ab56005bb9bdd523630d /kde-apps/ark/files
parent129160ec854dca4c3fedb5bcfbcb56930371da0f (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.patch60
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
+