summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Sturmlechner <asturm@gentoo.org>2024-11-06 00:49:01 +0100
committerAndreas Sturmlechner <asturm@gentoo.org>2024-11-06 20:51:44 +0100
commit4194414477473b6da6031425fbb52cf403b2c6f2 (patch)
treecb0035352abdf6c330baff237fef0ebb4cbce2e3 /kde-frameworks/ktexteditor
parentsci-libs/ideep: add 3.5.3_p2, drop 3.1.1 (diff)
downloadgentoo-4194414477473b6da6031425fbb52cf403b2c6f2.tar.gz
gentoo-4194414477473b6da6031425fbb52cf403b2c6f2.tar.bz2
gentoo-4194414477473b6da6031425fbb52cf403b2c6f2.zip
kde-frameworks/ktexteditor: Fix segfaults
KDE-bug: https://bugs.kde.org/show_bug.cgi?id=494826 Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
Diffstat (limited to 'kde-frameworks/ktexteditor')
-rw-r--r--kde-frameworks/ktexteditor/files/ktexteditor-6.7.0-fix-segfault.patch70
-rw-r--r--kde-frameworks/ktexteditor/ktexteditor-6.7.0-r1.ebuild54
2 files changed, 124 insertions, 0 deletions
diff --git a/kde-frameworks/ktexteditor/files/ktexteditor-6.7.0-fix-segfault.patch b/kde-frameworks/ktexteditor/files/ktexteditor-6.7.0-fix-segfault.patch
new file mode 100644
index 000000000000..9ae8ebff41b0
--- /dev/null
+++ b/kde-frameworks/ktexteditor/files/ktexteditor-6.7.0-fix-segfault.patch
@@ -0,0 +1,70 @@
+From 43c148b2664e15e2c517ba1eb53dc04447b7d499 Mon Sep 17 00:00:00 2001
+From: Waqar Ahmed <waqar.17a@gmail.com>
+Date: Wed, 16 Oct 2024 10:32:36 +0500
+Subject: [PATCH] Fix multiblock range handling when unwrapping line
+
+BUG: 494826
+(cherry picked from commit 2c7e0711efd65e68687d530240bb46a1cf8de122)
+---
+ src/buffer/katetextblock.cpp | 17 ++++++++++++-----
+ 1 file changed, 12 insertions(+), 5 deletions(-)
+
+diff --git a/src/buffer/katetextblock.cpp b/src/buffer/katetextblock.cpp
+index 90ed4e480..d1e767dfd 100644
+--- a/src/buffer/katetextblock.cpp
++++ b/src/buffer/katetextblock.cpp
+@@ -219,7 +219,7 @@ void TextBlock::unwrapLine(int line, TextBlock *previousBlock, int fixStartLines
+
+ // move all cursors because of the unwrapped line
+ // remember all ranges modified, optimize for the standard case of a few ranges
+- QVarLengthArray<TextRange *, 32> changedRanges;
++ QVarLengthArray<QPair<TextRange *, bool>, 32> changedRanges;
+ for (TextCursor *cursor : m_cursors) {
+ // this is the unwrapped line
+ if (cursor->lineInBlock() == 0) {
+@@ -230,7 +230,7 @@ void TextBlock::unwrapLine(int line, TextBlock *previousBlock, int fixStartLines
+ auto range = cursor->kateRange();
+ if (range && !range->isValidityCheckRequired()) {
+ range->setValidityCheckRequired();
+- changedRanges.push_back(range);
++ changedRanges.push_back({range, false});
+ }
+ }
+ }
+@@ -239,15 +239,18 @@ void TextBlock::unwrapLine(int line, TextBlock *previousBlock, int fixStartLines
+ for (auto it = previousBlock->m_cursors.begin(); it != previousBlock->m_cursors.end();) {
+ auto cursor = *it;
+ if (cursor->lineInBlock() == lastLineOfPreviousBlock) {
++ Kate::TextRange *range = cursor->kateRange();
++ // get the value before changing the block
++ const bool spansMultipleBlocks = range && range->spansMultipleBlocks();
+ cursor->m_line = 0;
+ cursor->m_block = this;
+ m_cursors.insert(cursor);
+
+ // remember range, if any, avoid double insert
+- auto range = cursor->kateRange();
+ if (range && !range->isValidityCheckRequired()) {
+ range->setValidityCheckRequired();
+- changedRanges.push_back(range);
++ // the range might not span multiple blocks anymore
++ changedRanges.push_back({range, spansMultipleBlocks});
+ }
+
+ // remove from previous block
+@@ -261,7 +264,11 @@ void TextBlock::unwrapLine(int line, TextBlock *previousBlock, int fixStartLines
+ // fixup the ranges that might be effected, because they moved from last line to this block
+ // we might need to invalidate ranges or notify about their changes
+ // checkValidity might trigger delete of the range!
+- for (TextRange *range : std::as_const(changedRanges)) {
++ for (auto [range, wasMultiblock] : changedRanges) {
++ // if the range doesn't span multiple blocks anymore remove it from buffer multiline range cache
++ if (!range->spansMultipleBlocks() && wasMultiblock) {
++ m_buffer->removeMultilineRange(range);
++ }
+ // afterwards check validity, might delete this range!
+ range->checkValidity();
+ }
+--
+2.47.0
+
diff --git a/kde-frameworks/ktexteditor/ktexteditor-6.7.0-r1.ebuild b/kde-frameworks/ktexteditor/ktexteditor-6.7.0-r1.ebuild
new file mode 100644
index 000000000000..9a041c7561e2
--- /dev/null
+++ b/kde-frameworks/ktexteditor/ktexteditor-6.7.0-r1.ebuild
@@ -0,0 +1,54 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PVCUT=$(ver_cut 1-2)
+QTMIN=6.6.2
+inherit ecm frameworks.kde.org
+
+DESCRIPTION="Framework providing a full text editor component"
+
+LICENSE="LGPL-2+"
+KEYWORDS="~amd64 ~arm64 ~ppc64 ~riscv ~x86"
+IUSE="+editorconfig"
+
+RESTRICT="test"
+
+DEPEND="
+ >=dev-qt/qtbase-${QTMIN}:6[gui,widgets]
+ >=dev-qt/qtdeclarative-${QTMIN}:6
+ >=dev-qt/qtspeech-${QTMIN}:6
+ =kde-frameworks/karchive-${PVCUT}*:6
+ =kde-frameworks/kauth-${PVCUT}*:6
+ =kde-frameworks/kcodecs-${PVCUT}*:6
+ =kde-frameworks/kcompletion-${PVCUT}*:6
+ =kde-frameworks/kconfig-${PVCUT}*:6
+ =kde-frameworks/kconfigwidgets-${PVCUT}*:6
+ =kde-frameworks/kcoreaddons-${PVCUT}*:6
+ =kde-frameworks/kguiaddons-${PVCUT}*:6
+ =kde-frameworks/ki18n-${PVCUT}*:6
+ =kde-frameworks/kiconthemes-${PVCUT}*:6
+ =kde-frameworks/kio-${PVCUT}*:6
+ =kde-frameworks/kitemviews-${PVCUT}*:6
+ =kde-frameworks/kjobwidgets-${PVCUT}*:6
+ =kde-frameworks/kparts-${PVCUT}*:6
+ =kde-frameworks/kwidgetsaddons-${PVCUT}*:6
+ =kde-frameworks/kwindowsystem-${PVCUT}*:6
+ =kde-frameworks/kxmlgui-${PVCUT}*:6
+ =kde-frameworks/sonnet-${PVCUT}*:6
+ =kde-frameworks/syntax-highlighting-${PVCUT}*:6
+ editorconfig? ( app-text/editorconfig-core-c )
+"
+RDEPEND="${DEPEND}"
+BDEPEND="test? ( >=kde-frameworks/kservice-${PVCUT}:6 )"
+
+PATCHES=( "${FILESDIR}/${P}-fix-segfault.patch" ) # KDE-bug 494826
+
+src_configure() {
+ local mycmakeargs=(
+ $(cmake_use_find_package editorconfig EditorConfig)
+ )
+
+ ecm_src_configure
+}