diff --git a/SOURCES/0001-contextengine-clear-invalid-ranges-if-BOM-is-found.patch b/SOURCES/0001-contextengine-clear-invalid-ranges-if-BOM-is-found.patch new file mode 100644 index 0000000..0c4a57f --- /dev/null +++ b/SOURCES/0001-contextengine-clear-invalid-ranges-if-BOM-is-found.patch @@ -0,0 +1,85 @@ +From ada3e0f4277028621d10d01fd6460b0dcc215f60 Mon Sep 17 00:00:00 2001 +From: Christian Hergert +Date: Sat, 20 Apr 2019 16:52:04 -0700 +Subject: [PATCH] contextengine: clear invalid ranges if BOM is found + +If we came across a BOM at the beginning of a buffer, then we will have +an invalid range before we check for BOM. In that case, we need to to +clear it before we proceed or some assertions (such as invalid range == 1) +will not be met. + +Fixes #30 +--- + gtksourceview/gtksourcecontextengine.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/gtksourceview/gtksourcecontextengine.c b/gtksourceview/gtksourcecontextengine.c +index f74ec78e..062cca65 100644 +--- a/gtksourceview/gtksourcecontextengine.c ++++ b/gtksourceview/gtksourcecontextengine.c +@@ -5354,60 +5354,62 @@ update_syntax (GtkSourceContextEngine *ce, + } + + gtk_text_buffer_get_iter_at_offset (buffer, &start_iter, start_offset); + gtk_text_buffer_get_iter_at_offset (buffer, &end_iter, end_offset); + + if (!gtk_text_iter_starts_line (&start_iter)) + { + gtk_text_iter_set_line_offset (&start_iter, 0); + start_offset = gtk_text_iter_get_offset (&start_iter); + } + + if (!gtk_text_iter_starts_line (&end_iter)) + { + gtk_text_iter_forward_line (&end_iter); + end_offset = gtk_text_iter_get_offset (&end_iter); + } + + if (0 == start_offset) + { + gunichar c; + + first_line = TRUE; + + /* If it is the first line and it starts with BOM, skip it + * since regexes in lang files do not take it into account */ + c = gtk_text_iter_get_char (&start_iter); + if (IS_BOM (c)) + { + gtk_text_iter_forward_char (&start_iter); + start_offset = gtk_text_iter_get_offset (&start_iter); ++ segment_remove (ce, invalid); ++ CHECK_TREE (ce); + } + } + + /* This happens after deleting all text on last line. */ + if (start_offset == end_offset) + { + g_assert (end_offset == gtk_text_buffer_get_char_count (buffer)); + g_assert (g_slist_length (ce->priv->invalid) == 1); + segment_remove (ce, invalid); + CHECK_TREE (ce); + goto out; + } + + + /* Main loop */ + + line_start = start_iter; + line_start_offset = start_offset; + line_end = line_start; + gtk_text_iter_forward_line (&line_end); + line_end_offset = gtk_text_iter_get_offset (&line_end); + analyzed_end = line_end_offset; + + timer = g_timer_new (); + + while (TRUE) + { + LineInfo line; + gboolean next_line_invalid = FALSE; + gboolean need_invalidate_next = FALSE; +-- +2.25.1 + diff --git a/SPECS/gtksourceview3.spec b/SPECS/gtksourceview3.spec index af755aa..bba3e98 100644 --- a/SPECS/gtksourceview3.spec +++ b/SPECS/gtksourceview3.spec @@ -5,13 +5,14 @@ Name: gtksourceview3 Version: 3.24.8 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A library for viewing source files License: LGPLv2+ URL: https://wiki.gnome.org/Projects/GtkSourceView Source0: https://download.gnome.org/sources/gtksourceview/3.24/gtksourceview-%{version}.tar.xz +BuildRequires: git BuildRequires: pkgconfig(gdk-pixbuf-2.0) BuildRequires: pkgconfig(gladeui-2.0) BuildRequires: pkgconfig(gobject-introspection-1.0) @@ -26,6 +27,8 @@ BuildRequires: vala Requires: glib2%{?_isa} >= %{glib_version} Requires: gtk3%{?_isa} >= %{gtk_version} +Patch0001: 0001-contextengine-clear-invalid-ranges-if-BOM-is-found.patch + %description GtkSourceView is a text widget that extends the standard GTK+ GtkTextView widget. It improves GtkTextView by implementing @@ -51,13 +54,13 @@ The gtksourceview3-tests package contains tests that can be used to verify the functionality of the installed gtksourceview package. %prep -%setup -q -n gtksourceview-%{version} +%autosetup -S git -n gtksourceview-%{version} %build %configure --disable-gtk-doc --disable-static --enable-glade-catalog \ --enable-installed-tests -make %{?_smp_mflags} +make %{?_smp_mflags} CFLAGS="$RPM_OPT_FLAGS -Wno-error" %install %make_install @@ -97,6 +100,10 @@ rm -f $RPM_BUILD_ROOT%{_libdir}/*.la %{_datadir}/installed-tests/gtksourceview-3.0/ %changelog +* Thu May 14 2020 Ray Strode - 3.24.8-2 +- Fix crash + Resolves: #1372988 + * Tue Jun 26 2018 Kalev Lember - 3.24.8-1 - Update to 3.24.8 - Resolves: #1569278