diff options
author | Andreas Sturmlechner <asturm@gentoo.org> | 2024-11-06 00:49:01 +0100 |
---|---|---|
committer | Andreas Sturmlechner <asturm@gentoo.org> | 2024-11-06 20:51:44 +0100 |
commit | 4194414477473b6da6031425fbb52cf403b2c6f2 (patch) | |
tree | cb0035352abdf6c330baff237fef0ebb4cbce2e3 /kde-frameworks/ktexteditor | |
parent | sci-libs/ideep: add 3.5.3_p2, drop 3.1.1 (diff) | |
download | gentoo-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.patch | 70 | ||||
-rw-r--r-- | kde-frameworks/ktexteditor/ktexteditor-6.7.0-r1.ebuild | 54 |
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 +} |