[pango/fix-another-crash] itemize: Work around gtk2 brokenness
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [pango/fix-another-crash] itemize: Work around gtk2 brokenness
- Date: Wed, 10 Jun 2020 15:38:48 +0000 (UTC)
commit 279bd5256b17ed68d50fbaaf7df60f189de33c96
Author: Matthias Clasen <mclasen redhat com>
Date: Wed Jun 10 11:36:24 2020 -0400
itemize: Work around gtk2 brokenness
GTK 2 apparently manages to call pango_itemize_with_base_dir
with a non-zero length for a string that contains 0 characters.
That in turn causes pango_log2vis_get_embedding_levels to
return NULL, and things go downhill from there.
A test is included.
Fixes: #480
pango/pango-context.c | 2 +-
tests/testmisc.c | 14 ++++++++++++++
2 files changed, 15 insertions(+), 1 deletion(-)
---
diff --git a/pango/pango-context.c b/pango/pango-context.c
index 7772878f..bebe804a 100644
--- a/pango/pango-context.c
+++ b/pango/pango-context.c
@@ -1566,7 +1566,7 @@ pango_itemize_with_base_dir (PangoContext *context,
g_return_val_if_fail (length >= 0, NULL);
g_return_val_if_fail (length == 0 || text != NULL, NULL);
- if (length == 0)
+ if (length == 0 || g_utf8_strlen (text, length) == 0)
return NULL;
itemize_state_init (&state, context, text, base_dir, start_index, length,
diff --git a/tests/testmisc.c b/tests/testmisc.c
index a078944d..f5583cab 100644
--- a/tests/testmisc.c
+++ b/tests/testmisc.c
@@ -41,12 +41,26 @@ test_shape_tab_crash (void)
g_object_unref (context);
}
+/* Test that itemizing a string with 0 characters works
+ */
+static void
+test_itemize_empty_crash (void)
+{
+ PangoContext *context;
+
+ context = pango_font_map_create_context (pango_cairo_font_map_get_default ());
+ pango_itemize_with_base_dir (context, PANGO_DIRECTION_LTR, "", 0, 1, NULL, NULL);
+
+ g_object_unref (context);
+}
+
int
main (int argc, char *argv[])
{
g_test_init (&argc, &argv, NULL);
g_test_add_func ("/layout/shape-tab-crash", test_shape_tab_crash);
+ g_test_add_func ("/layout/itemize-empty-crash", test_itemize_empty_crash);
return g_test_run ();
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]