public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [rpms/ibus] autotool: Fixed Bug 1471079 - SEGV of Emojier on de locale
@ 2026-05-31  2:06 Takao Fujiwara
  0 siblings, 0 replies; only message in thread
From: Takao Fujiwara @ 2026-05-31  2:06 UTC (permalink / raw)
  To: git-commits

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
 

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2026-05-31  2:06 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-05-31  2:06 [rpms/ibus] autotool: Fixed Bug 1471079 - SEGV of Emojier on de locale Takao Fujiwara

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox