public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
From: Takao Fujiwara <tfujiwar@redhat.com>
To: git-commits@fedoraproject.org
Subject: [rpms/ibus] autotool: Fixed Bug 1471079 - SEGV of Emojier on de locale
Date: Sun, 31 May 2026 02:06:35 GMT [thread overview]
Message-ID: <178019319523.1.10724874728156977591.rpms-ibus-b5c0e94f896b@fedoraproject.org> (raw)
A new commit has been pushed.
Repo : rpms/ibus
Branch : autotool
Commit : b5c0e94f896bc7d74b7df25d97d3a06c2f8c9aa2
Author : Takao Fujiwara <tfujiwar@redhat.com>
Date : 2017-07-21T12:40:10+09:00
Stats : +131/-19 in 2 file(s)
URL : https://src.fedoraproject.org/rpms/ibus/c/b5c0e94f896bc7d74b7df25d97d3a06c2f8c9aa2?branch=autotool
Log:
Fixed Bug 1471079 - SEGV of Emojier on de locale
---
diff --git a/ibus-HEAD.patch b/ibus-HEAD.patch
index 779a979..5b1434b 100644
--- a/ibus-HEAD.patch
+++ b/ibus-HEAD.patch
@@ -619,9 +619,117 @@ index 1d105fd..95912bf 100644
--
2.9.3
-From e10a2e344a947c3125190bdd55bbb7d0f6bc188e Mon Sep 17 00:00:00 2001
+From 76a83df1ab2aca4063968b2dd5300c64979e9496 Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Thu, 13 Jul 2017 18:46:26 +0900
+Date: Wed, 19 Jul 2017 20:48:17 +0900
+Subject: [PATCH] ui/gtk3: Fix SEGV of IBusEmojier on de_DE.UTF-8
+
+de's decimal_point is ',' instead of '.' and failed to load the
+CSS data in Gtk.CssProvider.load_from_data(), launched null
+window of emojis and finally caused a SEGV due to the null window.
+This also fixes some memory leaks.
+---
+ src/ibusemoji.c | 1 +
+ ui/gtk3/emojier.vala | 33 ++++++++++++++++++++++++++-------
+ 2 files changed, 27 insertions(+), 7 deletions(-)
+
+diff --git a/src/ibusemoji.c b/src/ibusemoji.c
+index 3d38c2a..d56c48a 100644
+--- a/src/ibusemoji.c
++++ b/src/ibusemoji.c
+@@ -591,6 +591,7 @@ out_load_cache:
+ g_variant_unref (variant);
+ if (variant_table)
+ g_variant_unref (variant_table);
++ g_free (contents);
+
+ return retval;
+ }
+diff --git a/ui/gtk3/emojier.vala b/ui/gtk3/emojier.vala
+index 95912bf..9df59ac 100644
+--- a/ui/gtk3/emojier.vala
++++ b/ui/gtk3/emojier.vala
+@@ -276,6 +276,17 @@ class IBusEmojier : Gtk.ApplicationWindow {
+ warning("Could not open display.");
+ return;
+ }
++ // Set en locale because de_DE's decimal_point is ',' instead of '.'
++ string? backup_locale =
++ Intl.setlocale(LocaleCategory.NUMERIC, null).dup();
++ if (Intl.setlocale(LocaleCategory.NUMERIC, "en_US.UTF-8") == null) {
++ if (Intl.setlocale(LocaleCategory.NUMERIC, "C.UTF-8") == null) {
++ if (Intl.setlocale(LocaleCategory.NUMERIC, "C") == null) {
++ warning("You don't install either en_US.UTF-8 or C.UTF-8 " +
++ "or C locale");
++ }
++ }
++ }
+ m_rgba = new ThemedRGBA(this);
+ uint bg_red = (uint)(m_rgba.normal_bg.red * 255);
+ uint bg_green = (uint)(m_rgba.normal_bg.green * 255);
+@@ -321,6 +332,10 @@ class IBusEmojier : Gtk.ApplicationWindow {
+ warning("Failed css_provider_from_data: %s", e.message);
+ return;
+ }
++ if (backup_locale != null)
++ Intl.setlocale(LocaleCategory.NUMERIC, backup_locale);
++ else
++ Intl.setlocale(LocaleCategory.NUMERIC, "");
+
+ Gtk.StyleContext.add_provider_for_screen(
+ screen,
+@@ -424,8 +439,9 @@ class IBusEmojier : Gtk.ApplicationWindow {
+ unowned GLib.SList<string> annotations = data.get_annotations();
+ foreach (string annotation in annotations) {
+ bool has_emoji = false;
+- unowned GLib.SList<string> hits =
+- m_annotation_to_emojis_dict.lookup(annotation);
++ GLib.SList<string> hits =
++ m_annotation_to_emojis_dict.lookup(annotation).copy_deep(
++ GLib.strdup);
+ foreach (string hit_emoji in hits) {
+ if (hit_emoji == emoji) {
+ has_emoji = true;
+@@ -485,7 +501,8 @@ class IBusEmojier : Gtk.ApplicationWindow {
+ private static void
+ update_annotations_with_description (IBus.EmojiData data,
+ string description) {
+- unowned GLib.SList<string> annotations = data.get_annotations();
++ GLib.SList<string> annotations =
++ data.get_annotations().copy_deep(GLib.strdup);
+ bool update_annotations = false;
+ string former = null;
+ string later = null;
+@@ -574,8 +591,9 @@ class IBusEmojier : Gtk.ApplicationWindow {
+ buff.append_unichar(0xfe0f);
+ if (m_emoji_to_data_dict.lookup(buff.str) != null)
+ base_emoji = buff.str;
+- unowned GLib.SList<string>? variants =
+- m_emoji_to_emoji_variants_dict.lookup(base_emoji);
++ GLib.SList<string>? variants =
++ m_emoji_to_emoji_variants_dict.lookup(
++ base_emoji).copy_deep(GLib.strdup);
+ if (variants.find_custom(emoji, GLib.strcmp) == null) {
+ if (variants == null)
+ variants.append(base_emoji);
+@@ -587,8 +605,9 @@ class IBusEmojier : Gtk.ApplicationWindow {
+ return;
+ }
+ bool has_emoji = false;
+- unowned GLib.SList<string> hits =
+- m_category_to_emojis_dict.lookup(category);
++ GLib.SList<string> hits =
++ m_category_to_emojis_dict.lookup(category).copy_deep(
++ GLib.strdup);
+ foreach (string hit_emoji in hits) {
+ if (hit_emoji == emoji) {
+ has_emoji = true;
+--
+2.9.3
+
+From 2686b46b29e12b4408033568a898949a731b7938 Mon Sep 17 00:00:00 2001
+From: fujiwarat <takao.fujiwara1@gmail.com>
+Date: Wed, 19 Jul 2017 21:02:20 +0900
Subject: [PATCH] Integrate custom rendering to use HarfBuzz glyph info
IBusFontSet offers FcFontSet, glyph info with HarfBuzz and rendering
@@ -645,9 +753,9 @@ Need configure --enable-harfbuzz-for-emoji option to enable this feature.
ui/gtk3/Makefile.am | 131 ++-
ui/gtk3/emojier.vala | 119 ++-
ui/gtk3/ibusemojidialog.h | 26 +
- ui/gtk3/ibusfontset.c | 922 +++++++++++++++++++++
+ ui/gtk3/ibusfontset.c | 923 +++++++++++++++++++++
ui/gtk3/ibusfontset.h | 302 +++++++
- 12 files changed, 1674 insertions(+), 106 deletions(-)
+ 12 files changed, 1675 insertions(+), 106 deletions(-)
rename {ui/gtk3 => bindings/vala}/IBusEmojiDialog-1.0.metadata (100%)
create mode 100644 bindings/vala/IBusFontSet-1.0.metadata
rename {ui/gtk3 => bindings/vala}/ibus-emoji-dialog-1.0.deps (100%)
@@ -1200,7 +1308,7 @@ index c79641a..cd1e9c2 100644
-include $(top_srcdir)/git.mk
diff --git a/ui/gtk3/emojier.vala b/ui/gtk3/emojier.vala
-index 95912bf..72e0093 100644
+index 9df59ac..492a42f 100644
--- a/ui/gtk3/emojier.vala
+++ b/ui/gtk3/emojier.vala
@@ -80,6 +80,9 @@ class IBusEmojier : Gtk.ApplicationWindow {
@@ -1312,7 +1420,7 @@ index 95912bf..72e0093 100644
private ThemedRGBA m_rgba;
private Gtk.Box m_vbox;
-@@ -1120,6 +1196,7 @@ class IBusEmojier : Gtk.ApplicationWindow {
+@@ -1139,6 +1215,7 @@ class IBusEmojier : Gtk.ApplicationWindow {
m_category_active_index = (int)list.length();
}
Gtk.Adjustment adjustment = m_list_box.get_adjustment();
@@ -1320,7 +1428,7 @@ index 95912bf..72e0093 100644
m_scrolled_window.set_vadjustment(adjustment);
show_category_list();
}
-@@ -1137,7 +1214,7 @@ class IBusEmojier : Gtk.ApplicationWindow {
+@@ -1156,7 +1233,7 @@ class IBusEmojier : Gtk.ApplicationWindow {
else if (keyval == Gdk.Key.Right)
m_lookup_table.cursor_down();
show_candidate_panel();
@@ -1329,7 +1437,7 @@ index 95912bf..72e0093 100644
int step = 0;
if (keyval == Gdk.Key.Left)
step = -1;
-@@ -1192,7 +1269,7 @@ class IBusEmojier : Gtk.ApplicationWindow {
+@@ -1211,7 +1288,7 @@ class IBusEmojier : Gtk.ApplicationWindow {
show_candidate_panel();
return true;
}
@@ -1338,7 +1446,7 @@ index 95912bf..72e0093 100644
int step = 0;
if (keyval == Gdk.Key.Home)
step = -1;
-@@ -1391,7 +1468,7 @@ class IBusEmojier : Gtk.ApplicationWindow {
+@@ -1410,7 +1487,7 @@ class IBusEmojier : Gtk.ApplicationWindow {
key_press_enter();
return true;
case Gdk.Key.BackSpace:
@@ -1347,7 +1455,7 @@ index 95912bf..72e0093 100644
if ((modifiers & Gdk.ModifierType.CONTROL_MASK) != 0) {
GLib.Signal.emit_by_name(m_entry, "delete-from-cursor",
Gtk.DeleteType.WORD_ENDS, -1);
-@@ -1403,7 +1480,7 @@ class IBusEmojier : Gtk.ApplicationWindow {
+@@ -1422,7 +1499,7 @@ class IBusEmojier : Gtk.ApplicationWindow {
break;
case Gdk.Key.Delete:
case Gdk.Key.KP_Delete:
@@ -1356,7 +1464,7 @@ index 95912bf..72e0093 100644
if ((modifiers & Gdk.ModifierType.CONTROL_MASK) != 0) {
GLib.Signal.emit_by_name(m_entry, "delete-from-cursor",
Gtk.DeleteType.WORD_ENDS, 1);
-@@ -1417,7 +1494,7 @@ class IBusEmojier : Gtk.ApplicationWindow {
+@@ -1436,7 +1513,7 @@ class IBusEmojier : Gtk.ApplicationWindow {
case Gdk.Key.space:
case Gdk.Key.KP_Space:
if ((modifiers & Gdk.ModifierType.SHIFT_MASK) != 0) {
@@ -1365,7 +1473,7 @@ index 95912bf..72e0093 100644
entry_enter_keyval(keyval);
} else if (m_candidate_panel_is_visible) {
enter_notify_disable_with_timer();
-@@ -1493,7 +1570,7 @@ class IBusEmojier : Gtk.ApplicationWindow {
+@@ -1512,7 +1589,7 @@ class IBusEmojier : Gtk.ApplicationWindow {
return true;
break;
case Gdk.Key.u:
@@ -1374,7 +1482,7 @@ index 95912bf..72e0093 100644
GLib.Signal.emit_by_name(m_entry,
"delete-from-cursor",
Gtk.DeleteType.PARAGRAPH_ENDS,
-@@ -1502,13 +1579,13 @@ class IBusEmojier : Gtk.ApplicationWindow {
+@@ -1521,13 +1598,13 @@ class IBusEmojier : Gtk.ApplicationWindow {
}
break;
case Gdk.Key.a:
@@ -1390,7 +1498,7 @@ index 95912bf..72e0093 100644
GLib.Signal.emit_by_name(m_entry, "cut-clipboard");
return true;
}
-@@ -1525,7 +1602,7 @@ class IBusEmojier : Gtk.ApplicationWindow {
+@@ -1544,7 +1621,7 @@ class IBusEmojier : Gtk.ApplicationWindow {
clipboard.store();
return true;
}
@@ -1399,7 +1507,7 @@ index 95912bf..72e0093 100644
GLib.Signal.emit_by_name(m_entry, "copy-clipboard");
return true;
}
-@@ -1581,6 +1658,22 @@ class IBusEmojier : Gtk.ApplicationWindow {
+@@ -1600,6 +1677,22 @@ class IBusEmojier : Gtk.ApplicationWindow {
}
@@ -1422,7 +1530,7 @@ index 95912bf..72e0093 100644
public static bool has_loaded_emoji_dict() {
if (m_emoji_to_data_dict == null)
return false;
-@@ -1611,6 +1704,10 @@ class IBusEmojier : Gtk.ApplicationWindow {
+@@ -1630,6 +1723,10 @@ class IBusEmojier : Gtk.ApplicationWindow {
int font_size = font_desc.get_size() / Pango.SCALE;
if (font_size != 0)
m_emoji_font_size = font_size;
@@ -1471,10 +1579,10 @@ index 24d195c..ed8886a 100644
#endif
diff --git a/ui/gtk3/ibusfontset.c b/ui/gtk3/ibusfontset.c
new file mode 100644
-index 0000000..72dfa28
+index 0000000..7864a64
--- /dev/null
+++ b/ui/gtk3/ibusfontset.c
-@@ -0,0 +1,922 @@
+@@ -0,0 +1,923 @@
+/* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- */
+/* vim:set et sts=4: */
+/* ibus - The Input Bus
@@ -2245,6 +2353,7 @@ index 0000000..72dfa28
+ FcConfigSubstitute (NULL, pattern, FcMatchFont);
+ FcDefaultSubstitute (pattern);
+ m_fcfontset = FcFontSort (NULL, pattern, FcTrue, NULL, &result);
++ FcPatternDestroy (pattern);
+ if (result == FcResultNoMatch || m_fcfontset->nfont == 0) {
+ g_warning ("No FcFontSet for %s", family ? family : "(null)");
+ return FALSE;
diff --git a/ibus.spec b/ibus.spec
index 271a094..73eaadf 100644
--- a/ibus.spec
+++ b/ibus.spec
@@ -30,7 +30,7 @@
Name: ibus
Version: 1.5.16
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Intelligent Input Bus for Linux OS
License: LGPLv2+
Group: System Environment/Libraries
@@ -430,6 +430,9 @@ gtk-query-immodules-3.0-%{__isa_bits} --update-cache &> /dev/null || :
%{_datadir}/gtk-doc/html/*
%changelog
+* Fri Jul 21 2017 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.16-4
+- Fixed Bug 1471079 - SEGV of Emojier on de locale
+
* Thu Jul 13 2017 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.16-3
- Enabled HarfBuzz rendering without Pango glyph calc for emoji
reply other threads:[~2026-05-31 2:06 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=178019319523.1.10724874728156977591.rpms-ibus-b5c0e94f896b@fedoraproject.org \
--to=tfujiwar@redhat.com \
--cc=git-commits@fedoraproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox