87 lines
3.2 KiB
Diff
87 lines
3.2 KiB
Diff
From 60f8171f062b4653a41cce02a582caa25331c68f Mon Sep 17 00:00:00 2001
|
|
From: Matthias Clasen <mclasen@redhat.com>
|
|
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 ();
|
|
}
|