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: Fix algorithm dead keys
Date: Sun, 31 May 2026 02:07:47 GMT	[thread overview]
Message-ID: <178019326713.1.15209492682789906968.rpms-ibus-9dd3ddc85414@fedoraproject.org> (raw)

A new commit has been pushed.

Repo   : rpms/ibus
Branch : autotool
Commit : 9dd3ddc8541465d34470e1dddc75f1349c18d19b
Author : Takao Fujiwara <tfujiwar@redhat.com>
Date   : 2022-03-01T20:32:58+09:00
Stats  : +281/-1 in 2 file(s)
URL    : https://src.fedoraproject.org/rpms/ibus/c/9dd3ddc8541465d34470e1dddc75f1349c18d19b?branch=autotool

Log:
Fix algorithm dead keys

---
diff --git a/ibus-HEAD.patch b/ibus-HEAD.patch
index 80550b0..523f457 100644
--- a/ibus-HEAD.patch
+++ b/ibus-HEAD.patch
@@ -2343,3 +2343,280 @@ index fa0c9b40..1b815345 100644
 -- 
 2.33.1
 
+From 19377ad22d8145ea431e5de51f047061c98f8d21 Mon Sep 17 00:00:00 2001
+From: fujiwarat <takao.fujiwara1@gmail.com>
+Date: Tue, 1 Mar 2022 18:26:21 +0900
+Subject: [PATCH] src/ibuscompose: Check algorithm dead key by 9 length
+
+This change fixes the D-Bus timeout by a long compose preedit text.
+check_normalize_nfc() calculates the factorical of the compse preedit
+length and assigne the value to an INT variable and it could excceed
+the MAX_INT.
+Probably I think the length of the compose algorizhm dead key would be
+enough 9. I.e. 9! == 46320 <= SHRT_MAX == 32767
+
+BUG=https://github.com/ibus/ibus/issues/2385
+---
+ src/ibuscomposetable.c | 35 +++++++++++++++++++++++------------
+ 1 file changed, 23 insertions(+), 12 deletions(-)
+
+diff --git a/src/ibuscomposetable.c b/src/ibuscomposetable.c
+index 250e0139..387a24a8 100644
+--- a/src/ibuscomposetable.c
++++ b/src/ibuscomposetable.c
+@@ -1,7 +1,7 @@
+ /* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- */
+ /* ibus - The Input Bus
+  * Copyright (C) 2013-2014 Peng Huang <shawn.p.huang@gmail.com>
+- * Copyright (C) 2013-2021 Takao Fujiwara <takao.fujiwara1@gmail.com>
++ * Copyright (C) 2013-2022 Takao Fujiwara <takao.fujiwara1@gmail.com>
+  *
+  * This library is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU Lesser General Public
+@@ -46,6 +46,7 @@
+ #define IBUS_COMPOSE_TABLE_MAGIC "IBusComposeTable"
+ #define IBUS_COMPOSE_TABLE_VERSION (4)
+ #define X11_DATADIR X11_DATA_PREFIX "/share/X11/locale"
++#define IBUS_MAX_COMPOSE_ALGORITHM_LEN 9
+ 
+ typedef struct {
+   gunichar     *sequence;
+@@ -1659,7 +1660,7 @@ ibus_compose_table_compact_check (const IBusComposeTableCompactEx
+ static gboolean
+ check_normalize_nfc (gunichar* combination_buffer, int n_compose)
+ {
+-    gunichar combination_buffer_temp[IBUS_MAX_COMPOSE_LEN];
++    gunichar combination_buffer_temp[IBUS_MAX_COMPOSE_ALGORITHM_LEN + 1];
+     char *combination_utf8_temp = NULL;
+     char *nfc_temp = NULL;
+     int n_combinations;
+@@ -1682,7 +1683,7 @@ check_normalize_nfc (gunichar* combination_buffer, int n_compose)
+ 
+     memcpy (combination_buffer_temp,
+             combination_buffer,
+-            IBUS_MAX_COMPOSE_LEN * sizeof (gunichar) );
++            IBUS_MAX_COMPOSE_ALGORITHM_LEN * sizeof (gunichar) );
+ 
+     for (i = 0; i < n_combinations; i++ ) {
+         g_unicode_canonical_ordering (combination_buffer_temp, n_compose);
+@@ -1694,7 +1695,7 @@ check_normalize_nfc (gunichar* combination_buffer, int n_compose)
+         if (g_utf8_strlen (nfc_temp, -1) == 1) {
+             memcpy (combination_buffer,
+                     combination_buffer_temp,
+-                    IBUS_MAX_COMPOSE_LEN * sizeof (gunichar) );
++                    IBUS_MAX_COMPOSE_ALGORITHM_LEN * sizeof (gunichar) );
+ 
+             g_free (combination_utf8_temp);
+             g_free (nfc_temp);
+@@ -1708,14 +1709,14 @@ check_normalize_nfc (gunichar* combination_buffer, int n_compose)
+         if (n_compose > 2) {
+             int j = i % (n_compose - 1) + 1;
+             int k = (i+1) % (n_compose - 1) + 1;
+-            if (j >= IBUS_MAX_COMPOSE_LEN) {
+-                g_warning ("j >= IBUS_MAX_COMPOSE_LEN for " \
+-                           "combination_buffer_temp");
++            if (j >= IBUS_MAX_COMPOSE_ALGORITHM_LEN) {
++                g_warning ("j >= %d for combination_buffer_temp",
++                           IBUS_MAX_COMPOSE_ALGORITHM_LEN);
+                 break;
+             }
+-            if (k >= IBUS_MAX_COMPOSE_LEN) {
+-                g_warning ("k >= IBUS_MAX_COMPOSE_LEN for " \
+-                           "combination_buffer_temp");
++            if (k >= IBUS_MAX_COMPOSE_ALGORITHM_LEN) {
++                g_warning ("k >= %d for combination_buffer_temp",
++                           IBUS_MAX_COMPOSE_ALGORITHM_LEN);
+                 break;
+             }
+             temp_swap = combination_buffer_temp[j];
+@@ -1737,13 +1738,23 @@ ibus_check_algorithmically (const guint16 *compose_buffer,
+ 
+ {
+     int i;
+-    gunichar combination_buffer[IBUS_MAX_COMPOSE_LEN];
++    gunichar combination_buffer[IBUS_MAX_COMPOSE_ALGORITHM_LEN + 1];
+     char *combination_utf8, *nfc;
+ 
+     if (output_char)
+         *output_char = 0;
+ 
+-    if (n_compose >= IBUS_MAX_COMPOSE_LEN)
++    /* Check the IBUS_MAX_COMPOSE_ALGORITHM_LEN length only here instead of
++     * IBUS_MAX_COMPOSE_LEN length.
++     * Because this API calls check_normalize_nfc() which calculates the factorial
++     * of `n_compose` and assigns the value to `n_combinations`.
++     * I.e. 9! == 40320 <= SHRT_MAX == 32767
++     * The factorial of exceeding INT_MAX spends a long time in check_normalize_nfc()
++     * and causes a D-Bus timeout between GTK clients and IBusEngineSimple.
++     * Currenlty IBUS_MAX_COMPOSE_LEN is much larger and supports the long compose
++     * sequence however the max 9 would be enough for this mechanical compose.
++     */
++    if (n_compose > IBUS_MAX_COMPOSE_ALGORITHM_LEN)
+         return FALSE;
+ 
+     for (i = 0; i < n_compose && IS_DEAD_KEY (compose_buffer[i]); i++)
+-- 
+2.34.1
+
+From df664b1f18a9c630ccd884f8ff698abf6cbb1578 Mon Sep 17 00:00:00 2001
+From: fujiwarat <takao.fujiwara1@gmail.com>
+Date: Tue, 1 Mar 2022 19:23:25 +0900
+Subject: [PATCH] src/ibusenginesimple: Support GTK4 coompose file
+
+Load $XDG_CONFIG_HOME/gtk-4.0/Compose
+---
+ src/ibusenginesimple.c | 27 +++++++++++++++------------
+ 1 file changed, 15 insertions(+), 12 deletions(-)
+
+diff --git a/src/ibusenginesimple.c b/src/ibusenginesimple.c
+index a80e41a5..c57a3ea5 100644
+--- a/src/ibusenginesimple.c
++++ b/src/ibusenginesimple.c
+@@ -1448,8 +1448,16 @@ ibus_engine_simple_add_table_by_locale (IBusEngineSimple *simple,
+             g_free (path);
+             return retval;
+         }
+-        g_free (path);
+-        path = NULL;
++        g_clear_pointer(&path, g_free);
++
++        path = g_build_filename (g_get_user_config_dir (),
++                                 "gtk-4.0", "Compose", NULL);
++        if (g_file_test (path, G_FILE_TEST_EXISTS)) {
++            ibus_engine_simple_add_compose_file (simple, path);
++            g_free (path);
++            return retval;
++        }
++        g_clear_pointer(&path, g_free);
+ 
+         path = g_build_filename (g_get_user_config_dir (),
+                                  "gtk-3.0", "Compose", NULL);
+@@ -1458,8 +1466,7 @@ ibus_engine_simple_add_table_by_locale (IBusEngineSimple *simple,
+             g_free (path);
+             return retval;
+         }
+-        g_free (path);
+-        path = NULL;
++        g_clear_pointer(&path, g_free);
+ 
+         home = g_get_home_dir ();
+         if (home == NULL)
+@@ -1471,8 +1478,7 @@ ibus_engine_simple_add_table_by_locale (IBusEngineSimple *simple,
+             g_free (path);
+             return retval;
+         }
+-        g_free (path);
+-        path = NULL;
++        g_clear_pointer(&path, g_free);
+ 
+ #if GLIB_CHECK_VERSION (2, 58, 0)
+         langs = g_get_language_names_with_category ("LC_CTYPE");
+@@ -1508,8 +1514,7 @@ ibus_engine_simple_add_table_by_locale (IBusEngineSimple *simple,
+ 
+             if (g_file_test (path, G_FILE_TEST_EXISTS))
+                 break;
+-            g_free (path);
+-            path = NULL;
++            g_clear_pointer(&path, g_free);
+         }
+ 
+ #if !GLIB_CHECK_VERSION (2, 58, 0)
+@@ -1518,15 +1523,13 @@ ibus_engine_simple_add_table_by_locale (IBusEngineSimple *simple,
+ 
+         if (path != NULL)
+             ibus_engine_simple_add_compose_file (simple, path);
+-        g_free (path);
+-        path = NULL;
++        g_clear_pointer(&path, g_free);
+     } else {
+         path = g_build_filename (X11_DATADIR, locale, "Compose", NULL);
+         do {
+             if (g_file_test (path, G_FILE_TEST_EXISTS))
+                 break;
+-            g_free (path);
+-            path = NULL;
++            g_clear_pointer(&path, g_free);
+         } while (0);
+         if (path == NULL)
+             return retval;
+-- 
+2.34.1
+
+From faf9f0bbb6edf6ed71bba9dcb314493f6b0276ea Mon Sep 17 00:00:00 2001
+From: fujiwarat <takao.fujiwara1@gmail.com>
+Date: Tue, 1 Mar 2022 19:44:17 +0900
+Subject: [PATCH] client/gtk2: Revert CCedilla change for pt-BR
+
+gtk_im_context_simple_add_table() is deprecated in GTK4.
+I decide to delete gtk_im_context_simple_add_table() here because
+the change 03c9e591430c62354bbf26ef7bd4a2e6acfb7c8f is no longer needed
+because IBusEngineSimple has implemented to load pt_br compose key
+by locale
+
+BUG=chromium-os:11421
+BUG=http://codereview.appspot.com/3989060
+---
+ client/gtk2/ibusimcontext.c | 33 +--------------------------------
+ 1 file changed, 1 insertion(+), 32 deletions(-)
+
+diff --git a/client/gtk2/ibusimcontext.c b/client/gtk2/ibusimcontext.c
+index a5e5e792..e314ae98 100644
+--- a/client/gtk2/ibusimcontext.c
++++ b/client/gtk2/ibusimcontext.c
+@@ -2,7 +2,7 @@
+ /* vim:set et sts=4: */
+ /* ibus - The Input Bus
+  * Copyright (C) 2008-2013 Peng Huang <shawn.p.huang@gmail.com>
+- * Copyright (C) 2015-2021 Takao Fujiwara <takao.fujiwara1@gmail.com>
++ * Copyright (C) 2015-2022 Takao Fujiwara <takao.fujiwara1@gmail.com>
+  * Copyright (C) 2008-2021 Red Hat, Inc.
+  *
+  * This library is free software; you can redistribute it and/or
+@@ -874,33 +874,6 @@ ibus_im_context_class_fini (IBusIMContextClass *class)
+     g_bus_unwatch_name (_daemon_name_watch_id);
+ }
+ 
+-/* Copied from gtk+2.0-2.20.1/modules/input/imcedilla.c to fix crosbug.com/11421.
+- * Overwrite the original Gtk+'s compose table in gtk+-2.x.y/gtk/gtkimcontextsimple.c. */
+-
+-/* The difference between this and the default input method is the handling
+- * of C+acute - this method produces C WITH CEDILLA rather than C WITH ACUTE.
+- * For languages that use CCedilla and not acute, this is the preferred mapping,
+- * and is particularly important for pt_BR, where the us-intl keyboard is
+- * used extensively.
+- */
+-static guint16 cedilla_compose_seqs[] = {
+-#ifdef DEPRECATED_GDK_KEYSYMS
+-  GDK_dead_acute,	GDK_C,	0,	0,	0,	0x00C7,	/* LATIN_CAPITAL_LETTER_C_WITH_CEDILLA */
+-  GDK_dead_acute,	GDK_c,	0,	0,	0,	0x00E7,	/* LATIN_SMALL_LETTER_C_WITH_CEDILLA */
+-  GDK_Multi_key,	GDK_apostrophe,	GDK_C,  0,      0,      0x00C7, /* LATIN_CAPITAL_LETTER_C_WITH_CEDILLA */
+-  GDK_Multi_key,	GDK_apostrophe,	GDK_c,  0,      0,      0x00E7, /* LATIN_SMALL_LETTER_C_WITH_CEDILLA */
+-  GDK_Multi_key,	GDK_C,  GDK_apostrophe,	0,      0,      0x00C7, /* LATIN_CAPITAL_LETTER_C_WITH_CEDILLA */
+-  GDK_Multi_key,	GDK_c,  GDK_apostrophe,	0,      0,      0x00E7, /* LATIN_SMALL_LETTER_C_WITH_CEDILLA */
+-#else
+-  GDK_KEY_dead_acute,	GDK_KEY_C,	0,	0,	0,	0x00C7,	/* LATIN_CAPITAL_LETTER_C_WITH_CEDILLA */
+-  GDK_KEY_dead_acute,	GDK_KEY_c,	0,	0,	0,	0x00E7,	/* LATIN_SMALL_LETTER_C_WITH_CEDILLA */
+-  GDK_KEY_Multi_key,	GDK_KEY_apostrophe,	GDK_KEY_C,  0,      0,      0x00C7, /* LATIN_CAPITAL_LETTER_C_WITH_CEDILLA */
+-  GDK_KEY_Multi_key,	GDK_KEY_apostrophe,	GDK_KEY_c,  0,      0,      0x00E7, /* LATIN_SMALL_LETTER_C_WITH_CEDILLA */
+-  GDK_KEY_Multi_key,	GDK_KEY_C,  GDK_KEY_apostrophe,	0,      0,      0x00C7, /* LATIN_CAPITAL_LETTER_C_WITH_CEDILLA */
+-  GDK_KEY_Multi_key,	GDK_KEY_c,  GDK_KEY_apostrophe,	0,      0,      0x00E7, /* LATIN_SMALL_LETTER_C_WITH_CEDILLA */
+-#endif
+-};
+-
+ static void
+ ibus_im_context_init (GObject *obj)
+ {
+@@ -936,10 +909,6 @@ ibus_im_context_init (GObject *obj)
+ 
+     // Create slave im context
+     ibusimcontext->slave = gtk_im_context_simple_new ();
+-    gtk_im_context_simple_add_table (GTK_IM_CONTEXT_SIMPLE (ibusimcontext->slave),
+-                                     cedilla_compose_seqs,
+-                                     4,
+-                                     G_N_ELEMENTS (cedilla_compose_seqs) / (4 + 2));
+ 
+     g_signal_connect (ibusimcontext->slave,
+                       "commit",
+-- 
+2.34.1
+

diff --git a/ibus.spec b/ibus.spec
index 0d18658..7ef6f72 100644
--- a/ibus.spec
+++ b/ibus.spec
@@ -39,7 +39,7 @@
 
 Name:           ibus
 Version:        1.5.25
-Release:        11%{?dist}
+Release:        12%{?dist}
 Summary:        Intelligent Input Bus for Linux OS
 License:        LGPLv2+
 URL:            https://github.com/ibus/%name/wiki
@@ -522,6 +522,9 @@ dconf update || :
 %{_datadir}/installed-tests/ibus
 
 %changelog
+* Tue Mar 01 2022 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.25-12
+- Fix algorithm dead keys
+
 * Mon Feb 21 2022 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.25-11
 - Fix forwarding keycode in GTK4
 

                 reply	other threads:[~2026-05-31  2:07 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=178019326713.1.15209492682789906968.rpms-ibus-9dd3ddc85414@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