Package: release.debian.org Severity: normal Tags: bookworm User: release.debian....@packages.debian.org Usertags: pu X-Debbugs-Cc: plasma-worksp...@packages.debian.org, delta...@debian.org Control: affects -1 + src:plasma-workspace
[ Reason ] krunner (a launcher built into KDE Plasma capable of doing all sorts of things) crashes when characters or numbers are typed in a rapid fashion. The bug was sadly introduced in Plasma 5.27.5, but subsequently fixed in Plasma 5.27.6. The Debian bug report can be found under https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1037557 This update backports a patch for plasma-workspace that is included in 5.27.6 back to 5.27.5. The patch is taken directly from the upstream project. [ Impact ] krunner cannot be used, in some cases hardly at all. [ Tests ] Both the bug submitter and myself verified that in the fixed version of plasma-workspace krunner does not crash any more. The bug is also solved in testing and unstable as they ship Plasma 5.27.7. [ Risks ] Risks are generally low. The patch is directly from upstream and part of subsequent releases of Plasma. [ Checklist ] [x] *all* changes are documented in the d/changelog [x] I reviewed all changes and I approve them [x] attach debdiff against the package in (old)stable [x] the issue is verified as fixed in unstable [ Changes ] Added patch to migiate krunner crash.
diffstat for plasma-workspace-5.27.5 plasma-workspace-5.27.5 changelog | 6 ++ patches/krunner_crash.patch | 107 ++++++++++++++++++++++++++++++++++++++++++++ patches/series | 3 + 3 files changed, 116 insertions(+) diff -Nru plasma-workspace-5.27.5/debian/changelog plasma-workspace-5.27.5/debian/changelog --- plasma-workspace-5.27.5/debian/changelog 2023-05-27 18:23:46.000000000 +0200 +++ plasma-workspace-5.27.5/debian/changelog 2023-08-16 21:18:49.000000000 +0200 @@ -1,3 +1,9 @@ +plasma-workspace (4:5.27.5-2+deb12u1) bookworm; urgency=medium + + * Backport patch to fix crash in krunner (Closes: #1037557). + + -- Patrick Franz <delta...@debian.org> Wed, 16 Aug 2023 21:18:49 +0200 + plasma-workspace (4:5.27.5-2) unstable; urgency=medium * Release to unstable. diff -Nru plasma-workspace-5.27.5/debian/patches/krunner_crash.patch plasma-workspace-5.27.5/debian/patches/krunner_crash.patch --- plasma-workspace-5.27.5/debian/patches/krunner_crash.patch 1970-01-01 01:00:00.000000000 +0100 +++ plasma-workspace-5.27.5/debian/patches/krunner_crash.patch 2023-08-16 21:14:47.000000000 +0200 @@ -0,0 +1,107 @@ +From 9d18e0821455366c00a763252515d48741316f6c Mon Sep 17 00:00:00 2001 +From: Max Ramanouski <max8...@gmail.com> +Date: Thu, 1 Jun 2023 19:05:00 +0300 +Subject: [PATCH] runners/calculator: implement thread-safety in + QalculateEngine::evaluate + +Libqalculate does not seem to support ability to run multiple computations +that are controlled or have timeout set beeing run in the same time. +After the timeout was introduced in QalculateEngine this led to BUG 470219, +which happens when computations are started from multiple threads in the same time +that "confuses" libqalculate computation thread which leads to crash in libqalculate code. + +To fix that we need to ensure that only one evaluation is running at single moment of time. +This is done via QalculateLock class that is like QMutexLocker but for libqalculate. +QalculateLock is implemented with two static mutexes. Mutex s_evalLock is used +to ensure that only one evaluation is running at single moment. +Mutex s_ctrlLock is used to ensure that thread that aborted evaluation will +get to start next evaluation. + +BUG: 470219 +--- + runners/calculator/qalculate_engine.cpp | 43 ++++++++++++++++++++----- + 1 file changed, 35 insertions(+), 8 deletions(-) + +diff --git a/runners/calculator/qalculate_engine.cpp b/runners/calculator/qalculate_engine.cpp +index a9d0a78243..09ff75fed5 100644 +--- a/runners/calculator/qalculate_engine.cpp ++++ b/runners/calculator/qalculate_engine.cpp +@@ -17,11 +17,42 @@ + #include <QClipboard> + #include <QDebug> + #include <QFile> ++#include <QMutex> + + #include <KIO/Job> + #include <KLocalizedString> + #include <KProtocolManager> + ++constexpr int evaluationTimeout = 10000; ++ ++// Synchronization lock that ensures that ++// a) only one evaluation is running at a time ++// b) abortion and preemption of evaluation is synchronized ++class QalculateLock ++{ ++public: ++ QalculateLock() ++ { ++ QMutexLocker ctrlLocker(&s_ctrlLock); ++ CALCULATOR->abort(); ++ s_evalLock.lock(); ++ CALCULATOR->startControl(evaluationTimeout); ++ } ++ ++ ~QalculateLock() ++ { ++ CALCULATOR->stopControl(); ++ s_evalLock.unlock(); ++ } ++ ++private: ++ static QMutex s_ctrlLock; ++ static QMutex s_evalLock; ++}; ++ ++QMutex QalculateLock::s_ctrlLock; ++QMutex QalculateLock::s_evalLock; ++ + QAtomicInt QalculateEngine::s_counter; + + QalculateEngine::QalculateEngine(QObject *parent) +@@ -114,7 +145,8 @@ QString QalculateEngine::evaluate(const QString &expression, bool *isApproximate + QByteArray ba = input.replace(QChar(0xA3), "GBP").replace(QChar(0xA5), "JPY").replace('$', "USD").replace(QChar(0x20AC), "EUR").toLocal8Bit(); + const char *ctext = ba.data(); + +- CALCULATOR->terminateThreads(); ++ QalculateLock qalculateLock; ++ + EvaluationOptions eo; + + eo.auto_post_conversion = POST_CONVERSION_BEST; +@@ -150,12 +182,7 @@ QString QalculateEngine::evaluate(const QString &expression, bool *isApproximate + } + #endif + +- constexpr int timeout = 10000; +- MathStructure result; +- if (!CALCULATOR->calculate(&result, ctext, timeout, eo)) { +- // BUG 468084: stop libqalculate thread if timeout is reached +- return {}; +- } ++ MathStructure result = CALCULATOR->calculate(ctext, eo); + + PrintOptions po; + po.base = base; +@@ -173,7 +200,7 @@ QString QalculateEngine::evaluate(const QString &expression, bool *isApproximate + + result.format(po); + +- m_lastResult = QString::fromStdString(CALCULATOR->print(result, timeout, po)); ++ m_lastResult = QString::fromStdString(result.print(po)); + + if (isApproximate) { + *isApproximate = result.isApproximate(); +-- +GitLab + diff -Nru plasma-workspace-5.27.5/debian/patches/series plasma-workspace-5.27.5/debian/patches/series --- plasma-workspace-5.27.5/debian/patches/series 2023-05-27 18:23:46.000000000 +0200 +++ plasma-workspace-5.27.5/debian/patches/series 2023-08-16 21:17:26.000000000 +0200 @@ -1,2 +1,5 @@ add_sddm_debian_breeze.patch enable_debianabimanager.diff + +# Fixed in 5.27.6 +krunner_crash.patch