diff --git a/pango-fixes-small-caps.patch b/pango-fixes-small-caps.patch new file mode 100644 index 0000000..3b4e718 --- /dev/null +++ b/pango-fixes-small-caps.patch @@ -0,0 +1,86 @@ +From 60f8171f062b4653a41cce02a582caa25331c68f Mon Sep 17 00:00:00 2001 +From: Matthias Clasen +Date: Sat, 13 Nov 2021 08:15:12 -0500 +Subject: [PATCH 1/2] Fix a bug in Small Caps handling + +We were not passing the correct split_offset to +pango_item_split(). + +Testcase included. + +Fixes: #627 +--- + pango/itemize.c | 4 ++-- + tests/testmisc.c | 24 ++++++++++++++++++++++++ + 2 files changed, 26 insertions(+), 2 deletions(-) + +Index: pango-1.49.3/pango/itemize.c +=================================================================== +--- pango-1.49.3.orig/pango/itemize.c ++++ pango-1.49.3/pango/itemize.c +@@ -1380,7 +1380,7 @@ split_item_for_variant (const char *te + /* p0 .. p is a lowercase segment */ + if (p < end) + { +- new_item = pango_item_split (item, p - p0, g_utf8_strlen (p, p - p0)); ++ new_item = pango_item_split (item, p - p0, g_utf8_strlen (p0, p - p0)); + list_item->data = new_item; + list_item = g_list_insert_before (list_item, list_item->next, item); + list_item = list_item->next; +@@ -1429,7 +1429,7 @@ split_item_for_variant (const char *te + /* p0 .. p is a uppercase segment */ + if (p < end) + { +- new_item = pango_item_split (item, p - p0, g_utf8_strlen (p, p - p0)); ++ new_item = pango_item_split (item, p - p0, g_utf8_strlen (p0, p - p0)); + list_item->data = new_item; + list_item = g_list_insert_before (list_item, list_item->next, item); + list_item = list_item->next; +Index: pango-1.49.3/tests/testmisc.c +=================================================================== +--- pango-1.49.3.orig/tests/testmisc.c ++++ pango-1.49.3/tests/testmisc.c +@@ -754,6 +754,35 @@ test_transform_rectangle (void) + g_assert_cmpint (rect2.height, ==, rect.width); + } + ++/* Test the crash with Small Caps in itemization from #627 */ ++static void ++test_small_caps_crash (void) ++{ ++ PangoContext *context; ++ PangoLayout *layout; ++ PangoFontDescription *desc; ++ int w, h; ++ ++ if (strcmp (G_OBJECT_TYPE_NAME (pango_cairo_font_map_get_default ()), "PangoCairoCoreTextFontMap") == 0) ++ { ++ g_test_skip ("This test needs a fontmap that supports Small-Caps"); ++ return; ++ } ++ ++ context = pango_font_map_create_context (pango_cairo_font_map_get_default ()); ++ layout = pango_layout_new (context); ++ desc = pango_font_description_from_string ("Cantarell Small-Caps 11"); ++ pango_layout_set_font_description (layout, desc); ++ ++ pango_layout_set_text (layout, "Pere Ràfols Soler\nEqualiser, LV2\nAudio: 1, 1\nMidi: 0, 0\nControls: 53, 2\nCV: 0, 0", -1); ++ ++ pango_layout_get_size (layout, &w, &h); ++ ++ pango_font_description_free (desc); ++ g_object_unref (layout); ++ g_object_unref (context); ++} ++ + int + main (int argc, char *argv[]) + { +@@ -787,6 +816,7 @@ main (int argc, char *argv[]) + g_test_add_func ("/layout/empty-line-height", test_empty_line_height); + g_test_add_func ("/layout/gravity-metrics", test_gravity_metrics); + g_test_add_func ("/matrix/transform-rectangle", test_transform_rectangle); ++ g_test_add_func ("/itemize/small-caps-crash", test_small_caps_crash); + + return g_test_run (); + } diff --git a/pango.spec b/pango.spec index 0c28652..9ffb811 100644 --- a/pango.spec +++ b/pango.spec @@ -9,12 +9,13 @@ Name: pango Version: 1.49.3 -Release: 1%{?dist} +Release: 2%{?dist} Summary: System for layout and rendering of internationalized text License: LGPLv2+ URL: http://www.pango.org Source0: https://download.gnome.org/sources/%{name}/1.49/%{name}-%{version}.tar.xz +Patch0: pango-fixes-small-caps.patch BuildRequires: pkgconfig(cairo) >= %{cairo_version} BuildRequires: pkgconfig(freetype2) >= %{freetype_version} @@ -126,6 +127,9 @@ fi %changelog +* Thu Nov 18 2021 Peng Wu - 1.49.3-2 +- Fix a bug in Small Caps handling + * Tue Nov 09 2021 Kalev Lember - 1.49.3-1 - Update to 1.49.3