diff --git a/ibus-1602549-covscan.patch b/ibus-1602549-covscan.patch deleted file mode 100644 index 82e9880..0000000 --- a/ibus-1602549-covscan.patch +++ /dev/null @@ -1,979 +0,0 @@ -From bdedaa4eec316f1d4527d70ac8d8b14e163226df Mon Sep 17 00:00:00 2001 -From: fujiwarat -Date: Mon, 23 Jul 2018 18:51:55 +0900 -Subject: [PATCH] RHEL code reviews - ---- - client/x11/main.c | 4 ++-- - setup/enginetreeview.py | 10 ++-------- - setup/ibus-setup.in | 5 ++--- - src/emoji-parser.c | 8 +++++--- - src/ibusbus.c | 9 ++++++--- - src/ibuscomposetable.c | 4 ++-- - src/ibusenginesimple.c | 22 +++++++++++++++++----- - src/ibushotkey.c | 5 +++-- - src/ibuskeymap.c | 10 ++++++---- - src/ibuskeynames.c | 3 +-- - src/ibusregistry.c | 4 ++-- - src/ibusservice.c | 13 +++++++++---- - src/ibusxml.c | 9 ++++++--- - src/unicode-parser.c | 3 ++- - util/IMdkit/FrameMgr.c | 7 +++++++ - util/IMdkit/IMConn.c | 6 ++++-- - util/IMdkit/i18nClbk.c | 10 ++++++++++ - util/IMdkit/i18nIc.c | 11 +++++++++-- - util/IMdkit/i18nMethod.c | 4 ++++ - util/IMdkit/i18nOffsetCache.c | 21 +++++++++++++++++---- - util/IMdkit/i18nPtHdr.c | 28 +++++++++++++++++++++++----- - util/IMdkit/i18nUtil.c | 12 +++++++++--- - util/IMdkit/i18nX.c | 10 ++++++++-- - 23 files changed, 156 insertions(+), 62 deletions(-) - -diff --git a/client/x11/main.c b/client/x11/main.c -index 159f4303..3bea94b7 100644 ---- a/client/x11/main.c -+++ b/client/x11/main.c -@@ -2,7 +2,7 @@ - /* vim:set et sts=4: */ - /* ibus - * Copyright (C) 2007-2015 Peng Huang -- * Copyright (C) 2015-2017 Takao Fujiwara -+ * Copyright (C) 2015-2018 Takao Fujiwara - * Copyright (C) 2007-2015 Red Hat, Inc. - * - * main.c: -@@ -196,7 +196,7 @@ _xim_preedit_callback_draw (XIMS xims, X11IC *x11ic, const gchar *preedit_string - } - } - -- for (i = 0; i < len; i++) { -+ for (i = 0; feedback && i < len; i++) { - feedback[i] = 0; - } - -diff --git a/setup/enginetreeview.py b/setup/enginetreeview.py -index 4de4a516..aea84593 100644 ---- a/setup/enginetreeview.py -+++ b/setup/enginetreeview.py -@@ -3,7 +3,8 @@ - # ibus - The Input Bus - # - # Copyright (c) 2007-2015 Peng Huang --# Copyright (c) 2007-2015 Red Hat, Inc. -+# Copyright (c) 2014-2018 Takao Fujiwara -+# Copyright (c) 2007-2018 Red Hat, Inc. - # - # This library is free software; you can redistribute it and/or - # modify it under the terms of the GNU Lesser General Public -@@ -91,7 +92,6 @@ class EngineTreeView(Gtk.TreeView): - renderer.set_property("text-column", 0) - renderer.set_property("has-entry", False) - renderer.set_property("editable", True) -- renderer.connect("changed", self.__engine_layout_changed_cb) - - column = Gtk.TreeViewColumn(_("Kbd")) - column.set_expand(False) -@@ -167,12 +167,6 @@ class EngineTreeView(Gtk.TreeView): - renderer.set_property("text", layout) - renderer.set_property("weight", Pango.Weight.NORMAL) - -- def __engine_layout_changed_cb(self, combo, path, it): -- return -- i = self.__model.get_iter(path) -- layout = combo.get_property("model").get_value(it, 0) -- self.__model.set_value(i, 1, layout) -- - def do_get_property(self, prop): - if prop.name == "active-engine": - it = self.get_selected_iter() -diff --git a/setup/ibus-setup.in b/setup/ibus-setup.in -index e0ed9ff5..bb5c85cf 100644 ---- a/setup/ibus-setup.in -+++ b/setup/ibus-setup.in -@@ -3,7 +3,8 @@ - # ibus - The Input Bus - # - # Copyright (c) 2007-2010 Peng Huang --# Copyright (c) 2007-2010 Red Hat, Inc. -+# Copyright (c) 2018 Takao Fujiwara -+# Copyright (c) 2007-2018 Red Hat, Inc. - # - # This library is free software; you can redistribute it and/or - # modify it under the terms of the GNU Lesser General Public -@@ -21,8 +22,6 @@ - # USA - - prefix=@prefix@ --exec_prefix=@exec_prefix@ --datarootdir=@datarootdir@ - libexecdir=@libexecdir@ - export IBUS_PREFIX=@prefix@ - export IBUS_DATAROOTDIR=@datarootdir@ -diff --git a/src/emoji-parser.c b/src/emoji-parser.c -index 0f7c8cfb..b8f4dcf1 100644 ---- a/src/emoji-parser.c -+++ b/src/emoji-parser.c -@@ -466,7 +466,8 @@ unicode_annotations_parse_xml_file (const gchar *filename, - g_return_val_if_fail (list != NULL, FALSE); - - if (!g_file_get_contents (filename, &content, &length, &error)) { -- g_warning ("Failed to load %s: %s", filename, error->message); -+ g_warning ("Failed to load %s: %s", filename, -+ error ? error->message : ""); - goto failed_to_parse_unicode_annotations; - } - -@@ -611,7 +612,7 @@ unicode_emoji_test_parse_line (const gchar *line, - int i; - gchar *amp; - segments = g_strsplit(data->subcategory, "-", -1); -- for (i = 0; segments[i]; i++) { -+ for (i = 0; segments && segments[i]; i++) { - if ((amp = strchr (segments[i], '&')) != NULL) { - if (amp - segments[i] <= 1) { - g_warning ("Wrong ampersand"); -@@ -665,7 +666,8 @@ unicode_emoji_test_parse_file (const gchar *filename, - g_return_val_if_fail (list != NULL, FALSE); - - if (!g_file_get_contents (filename, &content, &length, &error)) { -- g_warning ("Failed to load %s: %s", filename, error->message); -+ g_warning ("Failed to load %s: %s", -+ filename, error ? error->message : ""); - goto failed_to_parse_unicode_emoji_test; - } - head = end = content; -diff --git a/src/ibusbus.c b/src/ibusbus.c -index 98820e8a..30c2e321 100644 ---- a/src/ibusbus.c -+++ b/src/ibusbus.c -@@ -2,7 +2,7 @@ - /* vim:set et sts=4: */ - /* ibus - The Input Bus - * Copyright (C) 2008-2015 Peng Huang -- * Copyright (C) 2015-2016 Takao Fujiwara -+ * Copyright (C) 2015-2018 Takao Fujiwara - * Copyright (C) 2008-2016 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or -@@ -22,6 +22,7 @@ - */ - - #include "ibusbus.h" -+#include - #include - #include - #include -@@ -565,7 +566,9 @@ ibus_bus_init (IBusBus *bus) - return; - } - if (buf.st_mode != (S_IFDIR | S_IRWXU)) { -- g_chmod (path, 0700); -+ errno = 0; -+ if (g_chmod (path, 0700)) -+ g_warning ("chmod failed: %s", errno ? g_strerror (errno) : ""); - } - } - -@@ -673,7 +676,7 @@ ibus_bus_constructor (GType type, - ibus_bus_connect (_bus); - } - else { -- object = g_object_ref (_bus); -+ object = g_object_ref (G_OBJECT (_bus)); - } - - return object; -diff --git a/src/ibuscomposetable.c b/src/ibuscomposetable.c -index d473f581..b843e7e1 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 -- * Copyright (C) 2013-2017 Takao Fujiwara -+ * Copyright (C) 2013-2018 Takao Fujiwara - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public -@@ -532,7 +532,7 @@ ibus_compose_table_serialize (IBusComposeTable *compose_table) - - variant_data = g_variant_new_fixed_array (G_VARIANT_TYPE_UINT16, - compose_table->data, -- index_stride * n_seqs, -+ (gsize)index_stride * n_seqs, - sizeof (guint16)); - if (variant_data == NULL) { - g_warning ("Could not change compose data to GVariant."); -diff --git a/src/ibusenginesimple.c b/src/ibusenginesimple.c -index 68d6fb1e..aae6b8df 100644 ---- a/src/ibusenginesimple.c -+++ b/src/ibusenginesimple.c -@@ -2,7 +2,7 @@ - /* vim:set et sts=4: */ - /* ibus - The Input Bus - * Copyright (C) 2014 Peng Huang -- * Copyright (C) 2015-2017 Takao Fujiwara -+ * Copyright (C) 2015-2018 Takao Fujiwara - * Copyright (C) 2014-2017 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or -@@ -814,9 +814,21 @@ check_normalize_nfc (gunichar* combination_buffer, gint n_compose) - g_free (nfc_temp); - - if (n_compose > 2) { -- temp_swap = combination_buffer_temp[i % (n_compose - 1) + 1]; -- combination_buffer_temp[i % (n_compose - 1) + 1] = combination_buffer_temp[(i+1) % (n_compose - 1) + 1]; -- combination_buffer_temp[(i+1) % (n_compose - 1) + 1] = temp_swap; -+ gint j = i % (n_compose - 1) + 1; -+ gint k = (i+1) % (n_compose - 1) + 1; -+ if (j >= IBUS_MAX_COMPOSE_LEN) { -+ g_warning ("j >= IBUS_MAX_COMPOSE_LEN for " \ -+ "combination_buffer_temp"); -+ break; -+ } -+ if (k >= IBUS_MAX_COMPOSE_LEN) { -+ g_warning ("k >= IBUS_MAX_COMPOSE_LEN for " \ -+ "combination_buffer_temp"); -+ break; -+ } -+ temp_swap = combination_buffer_temp[j]; -+ combination_buffer_temp[j] = combination_buffer_temp[k]; -+ combination_buffer_temp[k] = temp_swap; - } - else - break; -@@ -1067,7 +1079,7 @@ ibus_engine_simple_process_key_event (IBusEngine *engine, - gboolean compose_finish; - gunichar output_char; - -- while (priv->compose_buffer[n_compose] != 0 && n_compose < EMOJI_SOURCE_LEN) -+ while (n_compose < EMOJI_SOURCE_LEN && priv->compose_buffer[n_compose] != 0) - n_compose++; - if (n_compose >= EMOJI_SOURCE_LEN) { - g_warning ("copmose table buffer is full."); -diff --git a/src/ibushotkey.c b/src/ibushotkey.c -index 0cdfa78b..00d502fc 100644 ---- a/src/ibushotkey.c -+++ b/src/ibushotkey.c -@@ -2,7 +2,8 @@ - /* vim:set et sts=4: */ - /* IBus - The Input Bus - * Copyright (C) 2008-2010 Peng Huang -- * Copyright (C) 2008-2010 Red Hat, Inc. -+ * Copyright (C) 2018 Takao Fujiwara -+ * Copyright (C) 2008-2018 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public -@@ -453,7 +454,7 @@ ibus_hotkey_profile_remove_hotkey (IBusHotkeyProfile *profile, - break; - } - -- g_assert (p2->event == event); -+ g_assert (p2 && p2->event == event); - - p2->hotkeys = g_list_remove (p2->hotkeys, p1); - if (p2->hotkeys == NULL) { -diff --git a/src/ibuskeymap.c b/src/ibuskeymap.c -index d7428c5d..27a56754 100644 ---- a/src/ibuskeymap.c -+++ b/src/ibuskeymap.c -@@ -2,7 +2,8 @@ - /* vim:set et sts=4: */ - /* IBus - The Input Bus - * Copyright (C) 2008-2010 Peng Huang -- * Copyright (C) 2008-2010 Red Hat, Inc. -+ * Copyright (C) 2018 Takao Fujiwara -+ * Copyright (C) 2008-2018 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public -@@ -72,7 +73,7 @@ static gboolean - ibus_keymap_parse_line (gchar *str, - KEYMAP keymap) - { -- gchar *p1, *p2; -+ gchar *p1, *p2, ch; - gint i; - guint keycode; - guint keysym; -@@ -139,11 +140,12 @@ ibus_keymap_parse_line (gchar *str, - if (keysym == IBUS_KEY_VoidSymbol) - return FALSE; - -+ /* Do not assign *p1 to g_ascii_isalpha() directly for the syntax check */ - if (i == 0 && - strncmp (p2, "addupper", sizeof ("addupper") - 1) == 0 && -- g_ascii_isalpha (*p1)) { -+ (ch = *p1) && g_ascii_isalpha (ch)) { - gchar buf[] = "a"; -- buf[0] = g_ascii_toupper(*p1); -+ buf[0] = g_ascii_toupper(ch); - keymap[keycode][0] = keymap[keycode][3] = keysym; - keymap[keycode][1] = keymap[keycode][2] = ibus_keyval_from_name (buf); - -diff --git a/src/ibuskeynames.c b/src/ibuskeynames.c -index c3665127..08505598 100644 ---- a/src/ibuskeynames.c -+++ b/src/ibuskeynames.c -@@ -192,8 +192,7 @@ ibus_key_event_from_string (const gchar *string, - if (*keyval != IBUS_KEY_VoidSymbol) - retval = TRUE; - _out: -- if (tokens) -- g_strfreev (tokens); -+ g_strfreev (tokens); - return retval; - } - -diff --git a/src/ibusregistry.c b/src/ibusregistry.c -index dfda2af3..b0483998 100644 ---- a/src/ibusregistry.c -+++ b/src/ibusregistry.c -@@ -2,7 +2,7 @@ - /* vim:set et sts=4: */ - /* bus - The Input Bus - * Copyright (C) 2015 Peng Huang -- * Copyright (C) 2015 Takao Fujiwara -+ * Copyright (C) 2015-2018 Takao Fujiwara - * Copyright (C) 2015 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or -@@ -472,7 +472,7 @@ ibus_registry_save_cache_file (IBusRegistry *registry, - } - - if (g_str_has_prefix (filename, g_get_user_cache_dir ())) { -- g_chmod (filename, 0644); -+ g_warn_if_fail (!g_chmod (filename, 0644)); - } - - return TRUE; -diff --git a/src/ibusservice.c b/src/ibusservice.c -index 2199d61d..8023527b 100644 ---- a/src/ibusservice.c -+++ b/src/ibusservice.c -@@ -2,7 +2,8 @@ - /* vim:set et sts=4: */ - /* ibus - The Input Bus - * Copyright (C) 2008-2015 Peng Huang -- * Copyright (C) 2008-2015 Red Hat, Inc. -+ * Copyright (C) 2015-2018 Takao Fujiwara -+ * Copyright (C) 2008-2018 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public -@@ -500,12 +501,14 @@ ibus_service_register (IBusService *service, - GDBusConnection *connection, - GError **error) - { -+ GArray *array = NULL; -+ GArray *interfaces; -+ GDBusInterfaceInfo **p; -+ - g_return_val_if_fail (IBUS_IS_SERVICE (service), FALSE); - g_return_val_if_fail (G_IS_DBUS_CONNECTION (connection), FALSE); - g_return_val_if_fail (error == NULL || *error == NULL, FALSE); - -- GArray *array = NULL; -- - if (g_hash_table_lookup (service->priv->table, connection)) { - if (error) { - *error = g_error_new (G_DBUS_ERROR, G_DBUS_ERROR_OBJECT_PATH_IN_USE, -@@ -515,7 +518,9 @@ ibus_service_register (IBusService *service, - goto error_out; - } - -- GDBusInterfaceInfo **p = (GDBusInterfaceInfo **)IBUS_SERVICE_GET_CLASS (service)->interfaces->data; -+ interfaces = IBUS_SERVICE_GET_CLASS (service)->interfaces; -+ g_assert (interfaces); -+ p = (GDBusInterfaceInfo **)interfaces->data; - if (*p == NULL) { - if (error) { - *error = g_error_new (G_DBUS_ERROR, G_DBUS_ERROR_FAILED, -diff --git a/src/ibusxml.c b/src/ibusxml.c -index 5cacc5af..266a8207 100644 ---- a/src/ibusxml.c -+++ b/src/ibusxml.c -@@ -2,7 +2,8 @@ - /* vim:set et sts=4: */ - /* bus - The Input Bus - * Copyright (C) 2008-2015 Peng Huang -- * Copyright (C) 2008-2015 Red Hat, Inc. -+ * Copyright (C) 2018 Takao Fujiwara -+ * Copyright (C) 2008-2018 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public -@@ -240,8 +241,10 @@ ibus_xml_parse_file (const gchar *filename) - return node; - } while (0); - -- g_warning ("Parse %s failed: %s", filename, error->message); -- g_error_free (error); -+ if (error) { -+ g_warning ("Parse %s failed: %s", filename, error->message); -+ g_error_free (error); -+ } - g_markup_parse_context_free (context); - return NULL; - } -diff --git a/src/unicode-parser.c b/src/unicode-parser.c -index e98c6d5f..0e4fe8b7 100644 ---- a/src/unicode-parser.c -+++ b/src/unicode-parser.c -@@ -281,7 +281,8 @@ ucd_parse_file (const gchar *filename, - g_return_val_if_fail (list != NULL, FALSE); - - if (!g_file_get_contents (filename, &content, &length, &error)) { -- g_warning ("Failed to load %s: %s", filename, error->message); -+ g_warning ("Failed to load %s: %s", -+ filename, error ? error->message : ""); - goto failed_to_parse_ucd_names_list; - } - head = end = content; -diff --git a/util/IMdkit/FrameMgr.c b/util/IMdkit/FrameMgr.c -index 9b497948..084b8810 100644 ---- a/util/IMdkit/FrameMgr.c -+++ b/util/IMdkit/FrameMgr.c -@@ -27,6 +27,7 @@ SOFTWARE. - ******************************************************************/ - - #include -+#include - #include - #include "FrameMgr.h" - -@@ -989,6 +990,7 @@ static XimFrameType FrameInstGetNextType(FrameInst fi, XimFrameTypeInfo info) - while (number > 0) - { - i = _FrameInstDecrement (fi->template, i); -+ assert (i >= 0); - size += _FrameInstGetItemSize (fi, i); - number--; - } -@@ -1138,6 +1140,7 @@ static XimFrameType FrameInstPeekNextType (FrameInst fi, XimFrameTypeInfo info) - while (number > 0) - { - i = _FrameInstDecrement (fi->template, i); -+ assert (i >= 0); - size += _FrameInstGetItemSize (fi, i); - number--; - } -@@ -1356,6 +1359,7 @@ static FmStatus FrameInstSetSize (FrameInst fi, int num) - break; - } - /*endswitch*/ -+ assert (i >= 0); - i = _FrameInstIncrement(fi->template, i); - } - /*endwhile*/ -@@ -1457,6 +1461,7 @@ static FmStatus FrameInstSetIterCount (FrameInst fi, int num) - break; - } - /*endswitch*/ -+ assert (i >= 0); - i = _FrameInstIncrement (fi->template, i); - } - /*endwhile*/ -@@ -1474,6 +1479,7 @@ static int FrameInstGetTotalSize (FrameInst fi) - while (fi->template[i].type != EOL) - { - size += _FrameInstGetItemSize (fi, i); -+ assert (i >= 0); - i = _FrameInstIncrement (fi->template, i); - } - /*endwhile*/ -@@ -2419,6 +2425,7 @@ static int _FrameInstGetItemSize (FrameInst fi, int cur_no) - size = 0; - while (number > 0) - { -+ assert (i >= 0); - i = _FrameInstDecrement (fi->template, i); - size += _FrameInstGetItemSize (fi, i); - number--; -diff --git a/util/IMdkit/IMConn.c b/util/IMdkit/IMConn.c -index 6d365893..8e8b8ece 100644 ---- a/util/IMdkit/IMConn.c -+++ b/util/IMdkit/IMConn.c -@@ -83,7 +83,7 @@ static char *_FindModifiers (XIMArg *args) - { - char *modifiers; - -- while (args->name) -+ while (args && args->name) - { - if (strcmp (args->name, IMModifiers) == 0) - { -@@ -144,8 +144,10 @@ XIMS IMOpenIM (Display *display, ...) - modifiers = _FindModifiers (args); - - ims = _GetIMS (modifiers); -- if (ims == (XIMS) NULL) -+ if (ims == (XIMS) NULL) { -+ XFree (args); - return (XIMS) NULL; -+ } - /*endif*/ - - ims->core.display = display; -diff --git a/util/IMdkit/i18nClbk.c b/util/IMdkit/i18nClbk.c -index b3edf3ad..f55f970f 100644 ---- a/util/IMdkit/i18nClbk.c -+++ b/util/IMdkit/i18nClbk.c -@@ -55,6 +55,7 @@ int _Xi18nGeometryCallback (XIMS ims, IMProtocol *call_data) - if (!reply) - { - _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); -+ FrameMgrFree (fm); - return False; - } - /*endif*/ -@@ -97,6 +98,7 @@ int _Xi18nPreeditStartCallback (XIMS ims, IMProtocol *call_data) - if (!reply) - { - _Xi18nSendMessage(ims, connect_id, XIM_ERROR, 0, 0, 0); -+ FrameMgrFree (fm); - return False; - } - /*endif*/ -@@ -159,6 +161,7 @@ int _Xi18nPreeditDrawCallback (XIMS ims, IMProtocol *call_data) - if (!reply) - { - _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); -+ FrameMgrFree (fm); - return False; - } - /*endif*/ -@@ -212,6 +215,7 @@ int _Xi18nPreeditCaretCallback (XIMS ims, IMProtocol *call_data) - if (!reply) - { - _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); -+ FrameMgrFree (fm); - return False; - } - /*endif*/ -@@ -256,6 +260,7 @@ int _Xi18nPreeditDoneCallback (XIMS ims, IMProtocol *call_data) - if (!reply) - { - _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); -+ FrameMgrFree (fm); - return False; - } - /*endif*/ -@@ -297,6 +302,7 @@ int _Xi18nStatusStartCallback (XIMS ims, IMProtocol *call_data) - if (!reply) - { - _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); -+ FrameMgrFree (fm); - return False; - } - /*endif*/ -@@ -363,6 +369,7 @@ int _Xi18nStatusDrawCallback (XIMS ims, IMProtocol *call_data) - if (!reply) - { - _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); -+ FrameMgrFree (fm); - return False; - } - /*endif*/ -@@ -390,6 +397,7 @@ int _Xi18nStatusDrawCallback (XIMS ims, IMProtocol *call_data) - if (!reply) - { - _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); -+ FrameMgrFree (fm); - return False; - } - /*endif*/ -@@ -435,6 +443,7 @@ int _Xi18nStatusDoneCallback (XIMS ims, IMProtocol *call_data) - if (!reply) - { - _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); -+ FrameMgrFree (fm); - return False; - } - /*endif*/ -@@ -479,6 +488,7 @@ int _Xi18nStringConversionCallback (XIMS ims, IMProtocol *call_data) - if (!reply) - { - _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); -+ FrameMgrFree (fm); - return False; - } - /*endif*/ -diff --git a/util/IMdkit/i18nIc.c b/util/IMdkit/i18nIc.c -index 87445986..289837a6 100644 ---- a/util/IMdkit/i18nIc.c -+++ b/util/IMdkit/i18nIc.c -@@ -475,8 +475,10 @@ static XICAttribute *CreateNestedList (CARD16 attr_id, - /*endif*/ - memset (nest_list, 0, sizeof (XICAttribute)); - nest_list->value = (void *) malloc (value_length); -- if (nest_list->value == NULL) -+ if (nest_list->value == NULL) { -+ XFree (nest_list); - return NULL; -+ } - /*endif*/ - memset (nest_list->value, 0, value_length); - -@@ -816,6 +818,7 @@ void _Xi18nChangeIC (XIMS ims, - if (!reply) - { - _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); -+ FrameMgrFree (fm); - return; - } - /*endif*/ -@@ -973,8 +976,10 @@ void _Xi18nGetIC (XIMS ims, IMProtocol *call_data, unsigned char *p) - getic->ic_attr = ic_attr; - if (i18n_core->address.improto) - { -- if (!(i18n_core->address.improto (ims, call_data))) -+ if (!(i18n_core->address.improto (ims, call_data))) { -+ XFree (attrID_list); - return; -+ } - /*endif*/ - if (_Xi18nNeedSwap (i18n_core, connect_id)) - SwapAttributes(getic->ic_attr, getic->ic_attr_num); -@@ -1020,6 +1025,8 @@ void _Xi18nGetIC (XIMS ims, IMProtocol *call_data, unsigned char *p) - if (reply == NULL) - { - _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); -+ XFree (attrID_list); -+ FrameMgrFree (fm); - return; - } - /*endif*/ -diff --git a/util/IMdkit/i18nMethod.c b/util/IMdkit/i18nMethod.c -index 203f8315..36dd28ac 100644 ---- a/util/IMdkit/i18nMethod.c -+++ b/util/IMdkit/i18nMethod.c -@@ -895,6 +895,7 @@ static Status xi18n_forwardEvent (XIMS ims, XPointer xp) - 0, - 0, - 0); -+ FrameMgrFree (fm); - return False; - } - /*endif*/ -@@ -964,6 +965,7 @@ static Status xi18n_commit (XIMS ims, XPointer xp) - 0, - 0, - 0); -+ FrameMgrFree (fm); - return False; - } - /*endif*/ -@@ -997,6 +999,7 @@ static Status xi18n_commit (XIMS ims, XPointer xp) - 0, - 0, - 0); -+ FrameMgrFree (fm); - return False; - } - /*endif*/ -@@ -1132,6 +1135,7 @@ static int xi18n_syncXlib (XIMS ims, XPointer xp) - reply = (unsigned char *) malloc (total_size); - if (!reply) { - _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); -+ FrameMgrFree (fm); - return False; - } - memset (reply, 0, total_size); -diff --git a/util/IMdkit/i18nOffsetCache.c b/util/IMdkit/i18nOffsetCache.c -index c952d5b4..d5379051 100644 ---- a/util/IMdkit/i18nOffsetCache.c -+++ b/util/IMdkit/i18nOffsetCache.c -@@ -27,9 +27,11 @@ - */ - - #include -+#include - #include - #include "IMdkit.h" - #include "Xi18n.h" -+#include "Xi18n.h" - - /* - * The XIM specification does not limit the number of window properties -@@ -52,9 +54,11 @@ void _Xi18nInitOffsetCache (Xi18nOffsetCache *offset_cache) - unsigned long _Xi18nLookupPropertyOffset (Xi18nOffsetCache *offset_cache, - Atom key) - { -- Xi18nAtomOffsetPair *data = offset_cache->data; -+ Xi18nAtomOffsetPair *data; - size_t i; - -+ assert (offset_cache); -+ data = offset_cache->data; - for (i = 0; i < offset_cache->size; ++i) { - if (data[i].key == key) { - return data[i].offset; -@@ -70,6 +74,7 @@ void _Xi18nSetPropertyOffset (Xi18nOffsetCache *offset_cache, Atom key, - Xi18nAtomOffsetPair *data = offset_cache->data; - size_t i; - -+ assert (data != NULL); - for (i = 0; i < offset_cache->size; ++i) { - if (data[i].key == key) { - data[i].offset = offset; -@@ -79,11 +84,19 @@ void _Xi18nSetPropertyOffset (Xi18nOffsetCache *offset_cache, Atom key, - - if (++offset_cache->size > offset_cache->capacity) { - offset_cache->capacity *= OFFSET_CACHE_GROWTH_FACTOR; -- offset_cache->data = data = (Xi18nAtomOffsetPair *) realloc (data, -+ offset_cache->data = (Xi18nAtomOffsetPair *) realloc (data, - offset_cache->capacity * sizeof (Xi18nAtomOffsetPair)); -+ if (offset_cache->data == NULL) { -+ offset_cache->data = data; -+ --offset_cache->size; -+ } -+ data = offset_cache->data; - } - -- data[i].key = key; -- data[i].offset = offset; -+ assert (data != NULL); -+ if (offset_cache->size > 0) { -+ data[i].key = key; -+ data[i].offset = offset; -+ } - } - -diff --git a/util/IMdkit/i18nPtHdr.c b/util/IMdkit/i18nPtHdr.c -index 2e673541..eaeeee1c 100644 ---- a/util/IMdkit/i18nPtHdr.c -+++ b/util/IMdkit/i18nPtHdr.c -@@ -110,6 +110,7 @@ static void ConnectMessageProc (XIMS ims, - if (!reply) - { - _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); -+ FrameMgrFree (fm); - return; - } - /*endif*/ -@@ -230,6 +231,7 @@ static void OpenMessageProc(XIMS ims, IMProtocol *call_data, unsigned char *p) - if (!reply) - { - _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); -+ FrameMgrFree (fm); - return; - } - /*endif*/ -@@ -312,6 +314,7 @@ static void CloseMessageProc (XIMS ims, - 0, - 0, - 0); -+ FrameMgrFree (fm); - return; - } - /*endif*/ -@@ -513,6 +516,10 @@ static void QueryExtensionMessageProc (XIMS ims, - 0, - 0, - 0); -+ FrameMgrFree (fm); -+ for (i = 0; i < reply_number; i++) -+ XFree (ext_list[i].name); -+ XFree ((char *) ext_list); - return; - } - /*endif*/ -@@ -610,8 +617,10 @@ static void GetIMValueFromName (Xi18n i18n_core, - - total_size = FrameMgrGetTotalSize (fm); - data = (unsigned char *) malloc (total_size); -- if (!data) -+ if (!data) { -+ FrameMgrFree (fm); - return; -+ } - /*endif*/ - memset (data, 0, total_size); - FrameMgrSetBuffer (fm, data); -@@ -666,11 +675,12 @@ static XIMAttribute *MakeIMAttributeList (Xi18n i18n_core, - /*endfor*/ - } - /*endfor*/ -- attrib_list = (XIMAttribute *) malloc (sizeof (XIMAttribute)*list_num); -+ attrib_list = -+ (XIMAttribute *) malloc (sizeof (XIMAttribute)*(list_num + 1)); - if (!attrib_list) - return NULL; - /*endif*/ -- memset (attrib_list, 0, sizeof (XIMAttribute)*list_num); -+ memset (attrib_list, 0, sizeof (XIMAttribute)*(list_num + 1)); - number_ret = list_num; - list_num = 0; - for (i = 0; i < *number; i++) -@@ -805,6 +815,10 @@ static void GetIMValuesMessageProc (XIMS ims, - if (!reply) - { - _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); -+ FrameMgrFree (fm); -+ for (i = 0; i < iter_count; i++) -+ XFree(im_attribute_list[i].value); -+ XFree (im_attribute_list); - return; - } - /*endif*/ -@@ -961,6 +975,7 @@ static void DestroyICMessageProc (XIMS ims, - if (!reply) - { - _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); -+ FrameMgrFree (fm); - return; - } - /*endif*/ -@@ -1026,6 +1041,7 @@ static void ResetICMessageProc (XIMS ims, - if (!reply) - { - _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); -+ FrameMgrFree (fm); - return; - } - /*endif*/ -@@ -1072,7 +1088,7 @@ static int WireEventToEvent (Xi18n i18n_core, - /* get & set serial */ - FrameMgrGetToken(fm, c16); - ev->xany.serial = (unsigned long)c16; -- ev->xany.serial |= serial << 16; -+ ev->xany.serial |= ((unsigned long)serial) << 16; - ev->xany.send_event = False; - ev->xany.display = i18n_core->address.dpy; - -@@ -1308,6 +1324,7 @@ static void TriggerNotifyMessageProc (XIMS ims, - if (!reply) - { - _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); -+ FrameMgrFree (fm); - return; - } - /*endif*/ -@@ -1443,7 +1460,7 @@ static void EncodingNegotiatonMessageProc (XIMS ims, - if (byte_length > 0) - { - enc_nego->encodinginfo = (XIMStr *) malloc (sizeof (XIMStr)*10); -- memset (enc_nego->encoding, 0, sizeof (XIMStr)*10); -+ memset (enc_nego->encodinginfo, 0, sizeof (XIMStr)*10); - i = 0; - while (FrameMgrIsIterLoopEnd (fm, &status) == False) - { -@@ -1488,6 +1505,7 @@ static void EncodingNegotiatonMessageProc (XIMS ims, - if (!reply) - { - _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); -+ FrameMgrFree (fm); - return; - } - /*endif*/ -diff --git a/util/IMdkit/i18nUtil.c b/util/IMdkit/i18nUtil.c -index 6557bd1a..109dcdf9 100644 ---- a/util/IMdkit/i18nUtil.c -+++ b/util/IMdkit/i18nUtil.c -@@ -148,6 +148,7 @@ void _Xi18nSendMessage (XIMS ims, - if (reply_hdr == NULL) - { - _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); -+ FrameMgrFree (fm); - return; - } - /*endif*/ -@@ -163,7 +164,8 @@ void _Xi18nSendMessage (XIMS ims, - replyp = reply; - memmove (reply, reply_hdr, header_size); - replyp += header_size; -- memmove (replyp, data, length); -+ if (length > 0 && data != NULL) -+ memmove (replyp, data, length); - - i18n_core->methods.send (ims, connect_id, reply, reply_length); - -@@ -202,8 +204,10 @@ void _Xi18nSendTriggerKey (XIMS ims, CARD16 connect_id) - total_size = FrameMgrGetTotalSize (fm); - - reply = (unsigned char *) malloc (total_size); -- if (!reply) -+ if (!reply) { -+ FrameMgrFree (fm); - return; -+ } - /*endif*/ - memset (reply, 0, total_size); - FrameMgrSetBuffer (fm, reply); -@@ -257,8 +261,10 @@ void _Xi18nSetEventMask (XIMS ims, - - total_size = FrameMgrGetTotalSize (fm); - reply = (unsigned char *) malloc (total_size); -- if (!reply) -+ if (!reply) { -+ FrameMgrFree (fm); - return; -+ } - /*endif*/ - memset (reply, 0, total_size); - FrameMgrSetBuffer (fm, reply); -diff --git a/util/IMdkit/i18nX.c b/util/IMdkit/i18nX.c -index 8385aba9..5e5c15fa 100644 ---- a/util/IMdkit/i18nX.c -+++ b/util/IMdkit/i18nX.c -@@ -31,6 +31,7 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - -+#include - #include - #include - #include -@@ -92,6 +93,7 @@ static unsigned char *ReadXIMMessage (XIMS ims, - client = client->next; - } - -+ assert (client); - if (ev->format == 8) { - /* ClientMessage only */ - XimProtoHdr *hdr = (XimProtoHdr *) ev->data.b; -@@ -158,6 +160,7 @@ static unsigned char *ReadXIMMessage (XIMS ims, - /* The property data is retrieved in 32-bit chunks */ - long_begin = offset / 4; - long_end = (end + 3) / 4; -+ assert (x_client); - return_code = XGetWindowProperty (i18n_core->address.dpy, - x_client->accept_win, - atom, -@@ -276,11 +279,11 @@ static Bool Xi18nXEnd(XIMS ims) - static char *MakeNewAtom (CARD16 connect_id, char *atomName) - { - static int sequence = 0; -- - sprintf (atomName, - "_server%d_%d", - connect_id, -- ((sequence > 20) ? (sequence = 0) : sequence++)); -+ ((sequence > 20) ? (sequence = 0) : (0x1f & sequence))); -+ sequence++; - return atomName; - } - -@@ -418,13 +421,16 @@ static Bool Xi18nXWait (XIMS ims, - && - (hdr->minor_opcode == minor_opcode)) - { -+ XFree (packet); - return True; - } - else if (hdr->major_opcode == XIM_ERROR) - { -+ XFree (packet); - return False; - } - /*endif*/ -+ XFree (packet); - } - /*endif*/ - } --- -2.17.1 - diff --git a/ibus-HEAD.patch b/ibus-HEAD.patch index ac3a533..511ce85 100644 --- a/ibus-HEAD.patch +++ b/ibus-HEAD.patch @@ -9645,3 +9645,1100 @@ index 52b78c17..95115b13 100644 -- 2.14.3 +From 6b47e41d66497dd35752a89ea80e4bac55b64e45 Mon Sep 17 00:00:00 2001 +From: Takuro Ashie +Date: Fri, 20 Jul 2018 12:30:09 +0900 +Subject: [PATCH] Remove a misleading "const" modifier of a return value + +ibus_key_event_to_string() uses g_string_free(str, FALSE) to return +a string so that users must free it. To clarify it, the const +modifier should be removed. +--- + src/ibuskeynames.c | 2 +- + src/ibusshare.h | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/ibuskeynames.c b/src/ibuskeynames.c +index fe7836ee..c3665127 100644 +--- a/src/ibuskeynames.c ++++ b/src/ibuskeynames.c +@@ -124,7 +124,7 @@ modifier_name[] = { + NULL, // 31 + }; + +-const gchar * ++gchar * + ibus_key_event_to_string (guint keyval, + guint modifiers) + { +diff --git a/src/ibusshare.h b/src/ibusshare.h +index 4f5a306b..d70af29f 100644 +--- a/src/ibusshare.h ++++ b/src/ibusshare.h +@@ -326,7 +326,7 @@ void ibus_free_strv (gchar **strv) + * + * Returns: The name of a key symbol and modifier. + */ +-const gchar *ibus_key_event_to_string ++gchar *ibus_key_event_to_string + (guint keyval, + guint modifiers); + +-- +2.17.1 + +From 0dde239a3c786dcc479e3103ccd49938fcb47191 Mon Sep 17 00:00:00 2001 +From: Kentaro Hayashi +Date: Tue, 24 Jul 2018 15:20:51 +0900 +Subject: [PATCH] bus: warn deprecated --mem-profile option + +Since GLib 2.46, memory profiling feature does not work anymore. + +GLib 2.46 or later means that Ubuntu 16.04 or later. Ubuntu +14.04 (trusty) are still supported as LTS phase, but it seems that +GLib is old enough (2.40) to drop support. + +As a result: + + * older than GLib 2.46: Just drop support + * GLib 2.46 or later: Show a warning message if --mem-profile is + used. +--- + bus/main.c | 15 +-------------- + configure.ac | 4 ++-- + 2 files changed, 3 insertions(+), 16 deletions(-) + +diff --git a/bus/main.c b/bus/main.c +index 2fb37b69..6f1f39ca 100644 +--- a/bus/main.c ++++ b/bus/main.c +@@ -160,18 +160,6 @@ daemon (gint nochdir, gint noclose) + } + #endif + +-/* +- * _sig_usr2_handler: +- * @sig: the signal number, which is usually SIGUSR2. +- * +- * A signal handler for SIGUSR2 signal. Dump a summary of memory usage to stderr. +- */ +-static void +-_sig_usr2_handler (int sig) +-{ +- g_mem_profile (); +-} +- + gint + main (gint argc, gchar **argv) + { +@@ -196,8 +184,7 @@ main (gint argc, gchar **argv) + } + + if (g_mempro) { +- g_mem_set_vtable (glib_mem_profiler_table); +- signal (SIGUSR2, _sig_usr2_handler); ++ g_warning ("--mem-profile no longer works with the GLib 2.46 or later"); + } + + /* check uid */ +diff --git a/configure.ac b/configure.ac +index f332a775..8e01c266 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -52,12 +52,12 @@ m4_define([ibus_binary_version], + [ibus_major_version.ibus_abi_current_minus_age.ibus_abi_age.ibus_abi_revision]) + + # Required versions of other packages. +-m4_define([glib_required_version], [2.36.0]) ++m4_define([glib_required_version], [2.46.0]) + + # VALA_TARGET_GLIB_VERSION is used by valac --ccode --target-glib . + # VALA_TARGET_GLIB_VERSION and glib_required_version will be different + # in the future. +-VALA_TARGET_GLIB_VERSION=2.36 ++VALA_TARGET_GLIB_VERSION=2.46 + AC_SUBST(VALA_TARGET_GLIB_VERSION) + + # Init automake. +-- +2.17.1 + +From 8d302c853f4e88f81652e0aeeca86ff1b5779ecb Mon Sep 17 00:00:00 2001 +From: fujiwarat +Date: Tue, 24 Jul 2018 16:04:31 +0900 +Subject: [PATCH] RHEL code reviews + +--- + client/x11/main.c | 4 ++-- + setup/enginetreeview.py | 10 ++-------- + setup/ibus-setup.in | 5 ++--- + src/emoji-parser.c | 8 +++++--- + src/ibusbus.c | 9 ++++++--- + src/ibuscomposetable.c | 4 ++-- + src/ibusenginesimple.c | 22 +++++++++++++++++----- + src/ibushotkey.c | 5 +++-- + src/ibuskeymap.c | 10 ++++++---- + src/ibuskeynames.c | 3 +-- + src/ibusregistry.c | 4 ++-- + src/ibusservice.c | 13 +++++++++---- + src/ibusxml.c | 9 ++++++--- + src/unicode-parser.c | 3 ++- + util/IMdkit/FrameMgr.c | 7 +++++++ + util/IMdkit/IMConn.c | 6 ++++-- + util/IMdkit/i18nClbk.c | 10 ++++++++++ + util/IMdkit/i18nIc.c | 11 +++++++++-- + util/IMdkit/i18nMethod.c | 4 ++++ + util/IMdkit/i18nOffsetCache.c | 21 +++++++++++++++++---- + util/IMdkit/i18nPtHdr.c | 28 +++++++++++++++++++++++----- + util/IMdkit/i18nUtil.c | 12 +++++++++--- + util/IMdkit/i18nX.c | 10 ++++++++-- + 23 files changed, 156 insertions(+), 62 deletions(-) + +diff --git a/client/x11/main.c b/client/x11/main.c +index 159f4303..3bea94b7 100644 +--- a/client/x11/main.c ++++ b/client/x11/main.c +@@ -2,7 +2,7 @@ + /* vim:set et sts=4: */ + /* ibus + * Copyright (C) 2007-2015 Peng Huang +- * Copyright (C) 2015-2017 Takao Fujiwara ++ * Copyright (C) 2015-2018 Takao Fujiwara + * Copyright (C) 2007-2015 Red Hat, Inc. + * + * main.c: +@@ -196,7 +196,7 @@ _xim_preedit_callback_draw (XIMS xims, X11IC *x11ic, const gchar *preedit_string + } + } + +- for (i = 0; i < len; i++) { ++ for (i = 0; feedback && i < len; i++) { + feedback[i] = 0; + } + +diff --git a/setup/enginetreeview.py b/setup/enginetreeview.py +index 4de4a516..aea84593 100644 +--- a/setup/enginetreeview.py ++++ b/setup/enginetreeview.py +@@ -3,7 +3,8 @@ + # ibus - The Input Bus + # + # Copyright (c) 2007-2015 Peng Huang +-# Copyright (c) 2007-2015 Red Hat, Inc. ++# Copyright (c) 2014-2018 Takao Fujiwara ++# Copyright (c) 2007-2018 Red Hat, Inc. + # + # This library is free software; you can redistribute it and/or + # modify it under the terms of the GNU Lesser General Public +@@ -91,7 +92,6 @@ class EngineTreeView(Gtk.TreeView): + renderer.set_property("text-column", 0) + renderer.set_property("has-entry", False) + renderer.set_property("editable", True) +- renderer.connect("changed", self.__engine_layout_changed_cb) + + column = Gtk.TreeViewColumn(_("Kbd")) + column.set_expand(False) +@@ -167,12 +167,6 @@ class EngineTreeView(Gtk.TreeView): + renderer.set_property("text", layout) + renderer.set_property("weight", Pango.Weight.NORMAL) + +- def __engine_layout_changed_cb(self, combo, path, it): +- return +- i = self.__model.get_iter(path) +- layout = combo.get_property("model").get_value(it, 0) +- self.__model.set_value(i, 1, layout) +- + def do_get_property(self, prop): + if prop.name == "active-engine": + it = self.get_selected_iter() +diff --git a/setup/ibus-setup.in b/setup/ibus-setup.in +index e0ed9ff5..bb5c85cf 100644 +--- a/setup/ibus-setup.in ++++ b/setup/ibus-setup.in +@@ -3,7 +3,8 @@ + # ibus - The Input Bus + # + # Copyright (c) 2007-2010 Peng Huang +-# Copyright (c) 2007-2010 Red Hat, Inc. ++# Copyright (c) 2018 Takao Fujiwara ++# Copyright (c) 2007-2018 Red Hat, Inc. + # + # This library is free software; you can redistribute it and/or + # modify it under the terms of the GNU Lesser General Public +@@ -21,8 +22,6 @@ + # USA + + prefix=@prefix@ +-exec_prefix=@exec_prefix@ +-datarootdir=@datarootdir@ + libexecdir=@libexecdir@ + export IBUS_PREFIX=@prefix@ + export IBUS_DATAROOTDIR=@datarootdir@ +diff --git a/src/emoji-parser.c b/src/emoji-parser.c +index 0f7c8cfb..b8f4dcf1 100644 +--- a/src/emoji-parser.c ++++ b/src/emoji-parser.c +@@ -466,7 +466,8 @@ unicode_annotations_parse_xml_file (const gchar *filename, + g_return_val_if_fail (list != NULL, FALSE); + + if (!g_file_get_contents (filename, &content, &length, &error)) { +- g_warning ("Failed to load %s: %s", filename, error->message); ++ g_warning ("Failed to load %s: %s", filename, ++ error ? error->message : ""); + goto failed_to_parse_unicode_annotations; + } + +@@ -611,7 +612,7 @@ unicode_emoji_test_parse_line (const gchar *line, + int i; + gchar *amp; + segments = g_strsplit(data->subcategory, "-", -1); +- for (i = 0; segments[i]; i++) { ++ for (i = 0; segments && segments[i]; i++) { + if ((amp = strchr (segments[i], '&')) != NULL) { + if (amp - segments[i] <= 1) { + g_warning ("Wrong ampersand"); +@@ -665,7 +666,8 @@ unicode_emoji_test_parse_file (const gchar *filename, + g_return_val_if_fail (list != NULL, FALSE); + + if (!g_file_get_contents (filename, &content, &length, &error)) { +- g_warning ("Failed to load %s: %s", filename, error->message); ++ g_warning ("Failed to load %s: %s", ++ filename, error ? error->message : ""); + goto failed_to_parse_unicode_emoji_test; + } + head = end = content; +diff --git a/src/ibusbus.c b/src/ibusbus.c +index 98820e8a..30c2e321 100644 +--- a/src/ibusbus.c ++++ b/src/ibusbus.c +@@ -2,7 +2,7 @@ + /* vim:set et sts=4: */ + /* ibus - The Input Bus + * Copyright (C) 2008-2015 Peng Huang +- * Copyright (C) 2015-2016 Takao Fujiwara ++ * Copyright (C) 2015-2018 Takao Fujiwara + * Copyright (C) 2008-2016 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or +@@ -22,6 +22,7 @@ + */ + + #include "ibusbus.h" ++#include + #include + #include + #include +@@ -565,7 +566,9 @@ ibus_bus_init (IBusBus *bus) + return; + } + if (buf.st_mode != (S_IFDIR | S_IRWXU)) { +- g_chmod (path, 0700); ++ errno = 0; ++ if (g_chmod (path, 0700)) ++ g_warning ("chmod failed: %s", errno ? g_strerror (errno) : ""); + } + } + +@@ -673,7 +676,7 @@ ibus_bus_constructor (GType type, + ibus_bus_connect (_bus); + } + else { +- object = g_object_ref (_bus); ++ object = g_object_ref (G_OBJECT (_bus)); + } + + return object; +diff --git a/src/ibuscomposetable.c b/src/ibuscomposetable.c +index d473f581..b843e7e1 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 +- * Copyright (C) 2013-2017 Takao Fujiwara ++ * Copyright (C) 2013-2018 Takao Fujiwara + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public +@@ -532,7 +532,7 @@ ibus_compose_table_serialize (IBusComposeTable *compose_table) + + variant_data = g_variant_new_fixed_array (G_VARIANT_TYPE_UINT16, + compose_table->data, +- index_stride * n_seqs, ++ (gsize)index_stride * n_seqs, + sizeof (guint16)); + if (variant_data == NULL) { + g_warning ("Could not change compose data to GVariant."); +diff --git a/src/ibusenginesimple.c b/src/ibusenginesimple.c +index 68d6fb1e..aae6b8df 100644 +--- a/src/ibusenginesimple.c ++++ b/src/ibusenginesimple.c +@@ -2,7 +2,7 @@ + /* vim:set et sts=4: */ + /* ibus - The Input Bus + * Copyright (C) 2014 Peng Huang +- * Copyright (C) 2015-2017 Takao Fujiwara ++ * Copyright (C) 2015-2018 Takao Fujiwara + * Copyright (C) 2014-2017 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or +@@ -814,9 +814,21 @@ check_normalize_nfc (gunichar* combination_buffer, gint n_compose) + g_free (nfc_temp); + + if (n_compose > 2) { +- temp_swap = combination_buffer_temp[i % (n_compose - 1) + 1]; +- combination_buffer_temp[i % (n_compose - 1) + 1] = combination_buffer_temp[(i+1) % (n_compose - 1) + 1]; +- combination_buffer_temp[(i+1) % (n_compose - 1) + 1] = temp_swap; ++ gint j = i % (n_compose - 1) + 1; ++ gint k = (i+1) % (n_compose - 1) + 1; ++ if (j >= IBUS_MAX_COMPOSE_LEN) { ++ g_warning ("j >= IBUS_MAX_COMPOSE_LEN for " \ ++ "combination_buffer_temp"); ++ break; ++ } ++ if (k >= IBUS_MAX_COMPOSE_LEN) { ++ g_warning ("k >= IBUS_MAX_COMPOSE_LEN for " \ ++ "combination_buffer_temp"); ++ break; ++ } ++ temp_swap = combination_buffer_temp[j]; ++ combination_buffer_temp[j] = combination_buffer_temp[k]; ++ combination_buffer_temp[k] = temp_swap; + } + else + break; +@@ -1067,7 +1079,7 @@ ibus_engine_simple_process_key_event (IBusEngine *engine, + gboolean compose_finish; + gunichar output_char; + +- while (priv->compose_buffer[n_compose] != 0 && n_compose < EMOJI_SOURCE_LEN) ++ while (n_compose < EMOJI_SOURCE_LEN && priv->compose_buffer[n_compose] != 0) + n_compose++; + if (n_compose >= EMOJI_SOURCE_LEN) { + g_warning ("copmose table buffer is full."); +diff --git a/src/ibushotkey.c b/src/ibushotkey.c +index 0cdfa78b..00d502fc 100644 +--- a/src/ibushotkey.c ++++ b/src/ibushotkey.c +@@ -2,7 +2,8 @@ + /* vim:set et sts=4: */ + /* IBus - The Input Bus + * Copyright (C) 2008-2010 Peng Huang +- * Copyright (C) 2008-2010 Red Hat, Inc. ++ * Copyright (C) 2018 Takao Fujiwara ++ * Copyright (C) 2008-2018 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public +@@ -453,7 +454,7 @@ ibus_hotkey_profile_remove_hotkey (IBusHotkeyProfile *profile, + break; + } + +- g_assert (p2->event == event); ++ g_assert (p2 && p2->event == event); + + p2->hotkeys = g_list_remove (p2->hotkeys, p1); + if (p2->hotkeys == NULL) { +diff --git a/src/ibuskeymap.c b/src/ibuskeymap.c +index d7428c5d..27a56754 100644 +--- a/src/ibuskeymap.c ++++ b/src/ibuskeymap.c +@@ -2,7 +2,8 @@ + /* vim:set et sts=4: */ + /* IBus - The Input Bus + * Copyright (C) 2008-2010 Peng Huang +- * Copyright (C) 2008-2010 Red Hat, Inc. ++ * Copyright (C) 2018 Takao Fujiwara ++ * Copyright (C) 2008-2018 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public +@@ -72,7 +73,7 @@ static gboolean + ibus_keymap_parse_line (gchar *str, + KEYMAP keymap) + { +- gchar *p1, *p2; ++ gchar *p1, *p2, ch; + gint i; + guint keycode; + guint keysym; +@@ -139,11 +140,12 @@ ibus_keymap_parse_line (gchar *str, + if (keysym == IBUS_KEY_VoidSymbol) + return FALSE; + ++ /* Do not assign *p1 to g_ascii_isalpha() directly for the syntax check */ + if (i == 0 && + strncmp (p2, "addupper", sizeof ("addupper") - 1) == 0 && +- g_ascii_isalpha (*p1)) { ++ (ch = *p1) && g_ascii_isalpha (ch)) { + gchar buf[] = "a"; +- buf[0] = g_ascii_toupper(*p1); ++ buf[0] = g_ascii_toupper(ch); + keymap[keycode][0] = keymap[keycode][3] = keysym; + keymap[keycode][1] = keymap[keycode][2] = ibus_keyval_from_name (buf); + +diff --git a/src/ibuskeynames.c b/src/ibuskeynames.c +index c3665127..08505598 100644 +--- a/src/ibuskeynames.c ++++ b/src/ibuskeynames.c +@@ -192,8 +192,7 @@ ibus_key_event_from_string (const gchar *string, + if (*keyval != IBUS_KEY_VoidSymbol) + retval = TRUE; + _out: +- if (tokens) +- g_strfreev (tokens); ++ g_strfreev (tokens); + return retval; + } + +diff --git a/src/ibusregistry.c b/src/ibusregistry.c +index dfda2af3..b0483998 100644 +--- a/src/ibusregistry.c ++++ b/src/ibusregistry.c +@@ -2,7 +2,7 @@ + /* vim:set et sts=4: */ + /* bus - The Input Bus + * Copyright (C) 2015 Peng Huang +- * Copyright (C) 2015 Takao Fujiwara ++ * Copyright (C) 2015-2018 Takao Fujiwara + * Copyright (C) 2015 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or +@@ -472,7 +472,7 @@ ibus_registry_save_cache_file (IBusRegistry *registry, + } + + if (g_str_has_prefix (filename, g_get_user_cache_dir ())) { +- g_chmod (filename, 0644); ++ g_warn_if_fail (!g_chmod (filename, 0644)); + } + + return TRUE; +diff --git a/src/ibusservice.c b/src/ibusservice.c +index 2199d61d..8023527b 100644 +--- a/src/ibusservice.c ++++ b/src/ibusservice.c +@@ -2,7 +2,8 @@ + /* vim:set et sts=4: */ + /* ibus - The Input Bus + * Copyright (C) 2008-2015 Peng Huang +- * Copyright (C) 2008-2015 Red Hat, Inc. ++ * Copyright (C) 2015-2018 Takao Fujiwara ++ * Copyright (C) 2008-2018 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public +@@ -500,12 +501,14 @@ ibus_service_register (IBusService *service, + GDBusConnection *connection, + GError **error) + { ++ GArray *array = NULL; ++ GArray *interfaces; ++ GDBusInterfaceInfo **p; ++ + g_return_val_if_fail (IBUS_IS_SERVICE (service), FALSE); + g_return_val_if_fail (G_IS_DBUS_CONNECTION (connection), FALSE); + g_return_val_if_fail (error == NULL || *error == NULL, FALSE); + +- GArray *array = NULL; +- + if (g_hash_table_lookup (service->priv->table, connection)) { + if (error) { + *error = g_error_new (G_DBUS_ERROR, G_DBUS_ERROR_OBJECT_PATH_IN_USE, +@@ -515,7 +518,9 @@ ibus_service_register (IBusService *service, + goto error_out; + } + +- GDBusInterfaceInfo **p = (GDBusInterfaceInfo **)IBUS_SERVICE_GET_CLASS (service)->interfaces->data; ++ interfaces = IBUS_SERVICE_GET_CLASS (service)->interfaces; ++ g_assert (interfaces); ++ p = (GDBusInterfaceInfo **)interfaces->data; + if (*p == NULL) { + if (error) { + *error = g_error_new (G_DBUS_ERROR, G_DBUS_ERROR_FAILED, +diff --git a/src/ibusxml.c b/src/ibusxml.c +index 5cacc5af..266a8207 100644 +--- a/src/ibusxml.c ++++ b/src/ibusxml.c +@@ -2,7 +2,8 @@ + /* vim:set et sts=4: */ + /* bus - The Input Bus + * Copyright (C) 2008-2015 Peng Huang +- * Copyright (C) 2008-2015 Red Hat, Inc. ++ * Copyright (C) 2018 Takao Fujiwara ++ * Copyright (C) 2008-2018 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public +@@ -240,8 +241,10 @@ ibus_xml_parse_file (const gchar *filename) + return node; + } while (0); + +- g_warning ("Parse %s failed: %s", filename, error->message); +- g_error_free (error); ++ if (error) { ++ g_warning ("Parse %s failed: %s", filename, error->message); ++ g_error_free (error); ++ } + g_markup_parse_context_free (context); + return NULL; + } +diff --git a/src/unicode-parser.c b/src/unicode-parser.c +index e98c6d5f..0e4fe8b7 100644 +--- a/src/unicode-parser.c ++++ b/src/unicode-parser.c +@@ -281,7 +281,8 @@ ucd_parse_file (const gchar *filename, + g_return_val_if_fail (list != NULL, FALSE); + + if (!g_file_get_contents (filename, &content, &length, &error)) { +- g_warning ("Failed to load %s: %s", filename, error->message); ++ g_warning ("Failed to load %s: %s", ++ filename, error ? error->message : ""); + goto failed_to_parse_ucd_names_list; + } + head = end = content; +diff --git a/util/IMdkit/FrameMgr.c b/util/IMdkit/FrameMgr.c +index 9b497948..084b8810 100644 +--- a/util/IMdkit/FrameMgr.c ++++ b/util/IMdkit/FrameMgr.c +@@ -27,6 +27,7 @@ SOFTWARE. + ******************************************************************/ + + #include ++#include + #include + #include "FrameMgr.h" + +@@ -989,6 +990,7 @@ static XimFrameType FrameInstGetNextType(FrameInst fi, XimFrameTypeInfo info) + while (number > 0) + { + i = _FrameInstDecrement (fi->template, i); ++ assert (i >= 0); + size += _FrameInstGetItemSize (fi, i); + number--; + } +@@ -1138,6 +1140,7 @@ static XimFrameType FrameInstPeekNextType (FrameInst fi, XimFrameTypeInfo info) + while (number > 0) + { + i = _FrameInstDecrement (fi->template, i); ++ assert (i >= 0); + size += _FrameInstGetItemSize (fi, i); + number--; + } +@@ -1356,6 +1359,7 @@ static FmStatus FrameInstSetSize (FrameInst fi, int num) + break; + } + /*endswitch*/ ++ assert (i >= 0); + i = _FrameInstIncrement(fi->template, i); + } + /*endwhile*/ +@@ -1457,6 +1461,7 @@ static FmStatus FrameInstSetIterCount (FrameInst fi, int num) + break; + } + /*endswitch*/ ++ assert (i >= 0); + i = _FrameInstIncrement (fi->template, i); + } + /*endwhile*/ +@@ -1474,6 +1479,7 @@ static int FrameInstGetTotalSize (FrameInst fi) + while (fi->template[i].type != EOL) + { + size += _FrameInstGetItemSize (fi, i); ++ assert (i >= 0); + i = _FrameInstIncrement (fi->template, i); + } + /*endwhile*/ +@@ -2419,6 +2425,7 @@ static int _FrameInstGetItemSize (FrameInst fi, int cur_no) + size = 0; + while (number > 0) + { ++ assert (i >= 0); + i = _FrameInstDecrement (fi->template, i); + size += _FrameInstGetItemSize (fi, i); + number--; +diff --git a/util/IMdkit/IMConn.c b/util/IMdkit/IMConn.c +index 6d365893..8e8b8ece 100644 +--- a/util/IMdkit/IMConn.c ++++ b/util/IMdkit/IMConn.c +@@ -83,7 +83,7 @@ static char *_FindModifiers (XIMArg *args) + { + char *modifiers; + +- while (args->name) ++ while (args && args->name) + { + if (strcmp (args->name, IMModifiers) == 0) + { +@@ -144,8 +144,10 @@ XIMS IMOpenIM (Display *display, ...) + modifiers = _FindModifiers (args); + + ims = _GetIMS (modifiers); +- if (ims == (XIMS) NULL) ++ if (ims == (XIMS) NULL) { ++ XFree (args); + return (XIMS) NULL; ++ } + /*endif*/ + + ims->core.display = display; +diff --git a/util/IMdkit/i18nClbk.c b/util/IMdkit/i18nClbk.c +index b3edf3ad..f55f970f 100644 +--- a/util/IMdkit/i18nClbk.c ++++ b/util/IMdkit/i18nClbk.c +@@ -55,6 +55,7 @@ int _Xi18nGeometryCallback (XIMS ims, IMProtocol *call_data) + if (!reply) + { + _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); ++ FrameMgrFree (fm); + return False; + } + /*endif*/ +@@ -97,6 +98,7 @@ int _Xi18nPreeditStartCallback (XIMS ims, IMProtocol *call_data) + if (!reply) + { + _Xi18nSendMessage(ims, connect_id, XIM_ERROR, 0, 0, 0); ++ FrameMgrFree (fm); + return False; + } + /*endif*/ +@@ -159,6 +161,7 @@ int _Xi18nPreeditDrawCallback (XIMS ims, IMProtocol *call_data) + if (!reply) + { + _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); ++ FrameMgrFree (fm); + return False; + } + /*endif*/ +@@ -212,6 +215,7 @@ int _Xi18nPreeditCaretCallback (XIMS ims, IMProtocol *call_data) + if (!reply) + { + _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); ++ FrameMgrFree (fm); + return False; + } + /*endif*/ +@@ -256,6 +260,7 @@ int _Xi18nPreeditDoneCallback (XIMS ims, IMProtocol *call_data) + if (!reply) + { + _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); ++ FrameMgrFree (fm); + return False; + } + /*endif*/ +@@ -297,6 +302,7 @@ int _Xi18nStatusStartCallback (XIMS ims, IMProtocol *call_data) + if (!reply) + { + _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); ++ FrameMgrFree (fm); + return False; + } + /*endif*/ +@@ -363,6 +369,7 @@ int _Xi18nStatusDrawCallback (XIMS ims, IMProtocol *call_data) + if (!reply) + { + _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); ++ FrameMgrFree (fm); + return False; + } + /*endif*/ +@@ -390,6 +397,7 @@ int _Xi18nStatusDrawCallback (XIMS ims, IMProtocol *call_data) + if (!reply) + { + _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); ++ FrameMgrFree (fm); + return False; + } + /*endif*/ +@@ -435,6 +443,7 @@ int _Xi18nStatusDoneCallback (XIMS ims, IMProtocol *call_data) + if (!reply) + { + _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); ++ FrameMgrFree (fm); + return False; + } + /*endif*/ +@@ -479,6 +488,7 @@ int _Xi18nStringConversionCallback (XIMS ims, IMProtocol *call_data) + if (!reply) + { + _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); ++ FrameMgrFree (fm); + return False; + } + /*endif*/ +diff --git a/util/IMdkit/i18nIc.c b/util/IMdkit/i18nIc.c +index 87445986..289837a6 100644 +--- a/util/IMdkit/i18nIc.c ++++ b/util/IMdkit/i18nIc.c +@@ -475,8 +475,10 @@ static XICAttribute *CreateNestedList (CARD16 attr_id, + /*endif*/ + memset (nest_list, 0, sizeof (XICAttribute)); + nest_list->value = (void *) malloc (value_length); +- if (nest_list->value == NULL) ++ if (nest_list->value == NULL) { ++ XFree (nest_list); + return NULL; ++ } + /*endif*/ + memset (nest_list->value, 0, value_length); + +@@ -816,6 +818,7 @@ void _Xi18nChangeIC (XIMS ims, + if (!reply) + { + _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); ++ FrameMgrFree (fm); + return; + } + /*endif*/ +@@ -973,8 +976,10 @@ void _Xi18nGetIC (XIMS ims, IMProtocol *call_data, unsigned char *p) + getic->ic_attr = ic_attr; + if (i18n_core->address.improto) + { +- if (!(i18n_core->address.improto (ims, call_data))) ++ if (!(i18n_core->address.improto (ims, call_data))) { ++ XFree (attrID_list); + return; ++ } + /*endif*/ + if (_Xi18nNeedSwap (i18n_core, connect_id)) + SwapAttributes(getic->ic_attr, getic->ic_attr_num); +@@ -1020,6 +1025,8 @@ void _Xi18nGetIC (XIMS ims, IMProtocol *call_data, unsigned char *p) + if (reply == NULL) + { + _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); ++ XFree (attrID_list); ++ FrameMgrFree (fm); + return; + } + /*endif*/ +diff --git a/util/IMdkit/i18nMethod.c b/util/IMdkit/i18nMethod.c +index 203f8315..36dd28ac 100644 +--- a/util/IMdkit/i18nMethod.c ++++ b/util/IMdkit/i18nMethod.c +@@ -895,6 +895,7 @@ static Status xi18n_forwardEvent (XIMS ims, XPointer xp) + 0, + 0, + 0); ++ FrameMgrFree (fm); + return False; + } + /*endif*/ +@@ -964,6 +965,7 @@ static Status xi18n_commit (XIMS ims, XPointer xp) + 0, + 0, + 0); ++ FrameMgrFree (fm); + return False; + } + /*endif*/ +@@ -997,6 +999,7 @@ static Status xi18n_commit (XIMS ims, XPointer xp) + 0, + 0, + 0); ++ FrameMgrFree (fm); + return False; + } + /*endif*/ +@@ -1132,6 +1135,7 @@ static int xi18n_syncXlib (XIMS ims, XPointer xp) + reply = (unsigned char *) malloc (total_size); + if (!reply) { + _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); ++ FrameMgrFree (fm); + return False; + } + memset (reply, 0, total_size); +diff --git a/util/IMdkit/i18nOffsetCache.c b/util/IMdkit/i18nOffsetCache.c +index c952d5b4..d5379051 100644 +--- a/util/IMdkit/i18nOffsetCache.c ++++ b/util/IMdkit/i18nOffsetCache.c +@@ -27,9 +27,11 @@ + */ + + #include ++#include + #include + #include "IMdkit.h" + #include "Xi18n.h" ++#include "Xi18n.h" + + /* + * The XIM specification does not limit the number of window properties +@@ -52,9 +54,11 @@ void _Xi18nInitOffsetCache (Xi18nOffsetCache *offset_cache) + unsigned long _Xi18nLookupPropertyOffset (Xi18nOffsetCache *offset_cache, + Atom key) + { +- Xi18nAtomOffsetPair *data = offset_cache->data; ++ Xi18nAtomOffsetPair *data; + size_t i; + ++ assert (offset_cache); ++ data = offset_cache->data; + for (i = 0; i < offset_cache->size; ++i) { + if (data[i].key == key) { + return data[i].offset; +@@ -70,6 +74,7 @@ void _Xi18nSetPropertyOffset (Xi18nOffsetCache *offset_cache, Atom key, + Xi18nAtomOffsetPair *data = offset_cache->data; + size_t i; + ++ assert (data != NULL); + for (i = 0; i < offset_cache->size; ++i) { + if (data[i].key == key) { + data[i].offset = offset; +@@ -79,11 +84,19 @@ void _Xi18nSetPropertyOffset (Xi18nOffsetCache *offset_cache, Atom key, + + if (++offset_cache->size > offset_cache->capacity) { + offset_cache->capacity *= OFFSET_CACHE_GROWTH_FACTOR; +- offset_cache->data = data = (Xi18nAtomOffsetPair *) realloc (data, ++ offset_cache->data = (Xi18nAtomOffsetPair *) realloc (data, + offset_cache->capacity * sizeof (Xi18nAtomOffsetPair)); ++ if (offset_cache->data == NULL) { ++ offset_cache->data = data; ++ --offset_cache->size; ++ } ++ data = offset_cache->data; + } + +- data[i].key = key; +- data[i].offset = offset; ++ assert (data != NULL); ++ if (offset_cache->size > 0) { ++ data[i].key = key; ++ data[i].offset = offset; ++ } + } + +diff --git a/util/IMdkit/i18nPtHdr.c b/util/IMdkit/i18nPtHdr.c +index 2e673541..eaeeee1c 100644 +--- a/util/IMdkit/i18nPtHdr.c ++++ b/util/IMdkit/i18nPtHdr.c +@@ -110,6 +110,7 @@ static void ConnectMessageProc (XIMS ims, + if (!reply) + { + _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); ++ FrameMgrFree (fm); + return; + } + /*endif*/ +@@ -230,6 +231,7 @@ static void OpenMessageProc(XIMS ims, IMProtocol *call_data, unsigned char *p) + if (!reply) + { + _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); ++ FrameMgrFree (fm); + return; + } + /*endif*/ +@@ -312,6 +314,7 @@ static void CloseMessageProc (XIMS ims, + 0, + 0, + 0); ++ FrameMgrFree (fm); + return; + } + /*endif*/ +@@ -513,6 +516,10 @@ static void QueryExtensionMessageProc (XIMS ims, + 0, + 0, + 0); ++ FrameMgrFree (fm); ++ for (i = 0; i < reply_number; i++) ++ XFree (ext_list[i].name); ++ XFree ((char *) ext_list); + return; + } + /*endif*/ +@@ -610,8 +617,10 @@ static void GetIMValueFromName (Xi18n i18n_core, + + total_size = FrameMgrGetTotalSize (fm); + data = (unsigned char *) malloc (total_size); +- if (!data) ++ if (!data) { ++ FrameMgrFree (fm); + return; ++ } + /*endif*/ + memset (data, 0, total_size); + FrameMgrSetBuffer (fm, data); +@@ -666,11 +675,12 @@ static XIMAttribute *MakeIMAttributeList (Xi18n i18n_core, + /*endfor*/ + } + /*endfor*/ +- attrib_list = (XIMAttribute *) malloc (sizeof (XIMAttribute)*list_num); ++ attrib_list = ++ (XIMAttribute *) malloc (sizeof (XIMAttribute)*(list_num + 1)); + if (!attrib_list) + return NULL; + /*endif*/ +- memset (attrib_list, 0, sizeof (XIMAttribute)*list_num); ++ memset (attrib_list, 0, sizeof (XIMAttribute)*(list_num + 1)); + number_ret = list_num; + list_num = 0; + for (i = 0; i < *number; i++) +@@ -805,6 +815,10 @@ static void GetIMValuesMessageProc (XIMS ims, + if (!reply) + { + _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); ++ FrameMgrFree (fm); ++ for (i = 0; i < iter_count; i++) ++ XFree(im_attribute_list[i].value); ++ XFree (im_attribute_list); + return; + } + /*endif*/ +@@ -961,6 +975,7 @@ static void DestroyICMessageProc (XIMS ims, + if (!reply) + { + _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); ++ FrameMgrFree (fm); + return; + } + /*endif*/ +@@ -1026,6 +1041,7 @@ static void ResetICMessageProc (XIMS ims, + if (!reply) + { + _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); ++ FrameMgrFree (fm); + return; + } + /*endif*/ +@@ -1072,7 +1088,7 @@ static int WireEventToEvent (Xi18n i18n_core, + /* get & set serial */ + FrameMgrGetToken(fm, c16); + ev->xany.serial = (unsigned long)c16; +- ev->xany.serial |= serial << 16; ++ ev->xany.serial |= ((unsigned long)serial) << 16; + ev->xany.send_event = False; + ev->xany.display = i18n_core->address.dpy; + +@@ -1308,6 +1324,7 @@ static void TriggerNotifyMessageProc (XIMS ims, + if (!reply) + { + _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); ++ FrameMgrFree (fm); + return; + } + /*endif*/ +@@ -1443,7 +1460,7 @@ static void EncodingNegotiatonMessageProc (XIMS ims, + if (byte_length > 0) + { + enc_nego->encodinginfo = (XIMStr *) malloc (sizeof (XIMStr)*10); +- memset (enc_nego->encoding, 0, sizeof (XIMStr)*10); ++ memset (enc_nego->encodinginfo, 0, sizeof (XIMStr)*10); + i = 0; + while (FrameMgrIsIterLoopEnd (fm, &status) == False) + { +@@ -1488,6 +1505,7 @@ static void EncodingNegotiatonMessageProc (XIMS ims, + if (!reply) + { + _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); ++ FrameMgrFree (fm); + return; + } + /*endif*/ +diff --git a/util/IMdkit/i18nUtil.c b/util/IMdkit/i18nUtil.c +index 6557bd1a..109dcdf9 100644 +--- a/util/IMdkit/i18nUtil.c ++++ b/util/IMdkit/i18nUtil.c +@@ -148,6 +148,7 @@ void _Xi18nSendMessage (XIMS ims, + if (reply_hdr == NULL) + { + _Xi18nSendMessage (ims, connect_id, XIM_ERROR, 0, 0, 0); ++ FrameMgrFree (fm); + return; + } + /*endif*/ +@@ -163,7 +164,8 @@ void _Xi18nSendMessage (XIMS ims, + replyp = reply; + memmove (reply, reply_hdr, header_size); + replyp += header_size; +- memmove (replyp, data, length); ++ if (length > 0 && data != NULL) ++ memmove (replyp, data, length); + + i18n_core->methods.send (ims, connect_id, reply, reply_length); + +@@ -202,8 +204,10 @@ void _Xi18nSendTriggerKey (XIMS ims, CARD16 connect_id) + total_size = FrameMgrGetTotalSize (fm); + + reply = (unsigned char *) malloc (total_size); +- if (!reply) ++ if (!reply) { ++ FrameMgrFree (fm); + return; ++ } + /*endif*/ + memset (reply, 0, total_size); + FrameMgrSetBuffer (fm, reply); +@@ -257,8 +261,10 @@ void _Xi18nSetEventMask (XIMS ims, + + total_size = FrameMgrGetTotalSize (fm); + reply = (unsigned char *) malloc (total_size); +- if (!reply) ++ if (!reply) { ++ FrameMgrFree (fm); + return; ++ } + /*endif*/ + memset (reply, 0, total_size); + FrameMgrSetBuffer (fm, reply); +diff --git a/util/IMdkit/i18nX.c b/util/IMdkit/i18nX.c +index 8385aba9..5e5c15fa 100644 +--- a/util/IMdkit/i18nX.c ++++ b/util/IMdkit/i18nX.c +@@ -31,6 +31,7 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ******************************************************************/ + ++#include + #include + #include + #include +@@ -92,6 +93,7 @@ static unsigned char *ReadXIMMessage (XIMS ims, + client = client->next; + } + ++ assert (client); + if (ev->format == 8) { + /* ClientMessage only */ + XimProtoHdr *hdr = (XimProtoHdr *) ev->data.b; +@@ -158,6 +160,7 @@ static unsigned char *ReadXIMMessage (XIMS ims, + /* The property data is retrieved in 32-bit chunks */ + long_begin = offset / 4; + long_end = (end + 3) / 4; ++ assert (x_client); + return_code = XGetWindowProperty (i18n_core->address.dpy, + x_client->accept_win, + atom, +@@ -276,11 +279,11 @@ static Bool Xi18nXEnd(XIMS ims) + static char *MakeNewAtom (CARD16 connect_id, char *atomName) + { + static int sequence = 0; +- + sprintf (atomName, + "_server%d_%d", + connect_id, +- ((sequence > 20) ? (sequence = 0) : sequence++)); ++ ((sequence > 20) ? (sequence = 0) : (0x1f & sequence))); ++ sequence++; + return atomName; + } + +@@ -418,13 +421,16 @@ static Bool Xi18nXWait (XIMS ims, + && + (hdr->minor_opcode == minor_opcode)) + { ++ XFree (packet); + return True; + } + else if (hdr->major_opcode == XIM_ERROR) + { ++ XFree (packet); + return False; + } + /*endif*/ ++ XFree (packet); + } + /*endif*/ + } +-- +2.17.1 + diff --git a/ibus.spec b/ibus.spec index c11cb0f..445131f 100644 --- a/ibus.spec +++ b/ibus.spec @@ -39,7 +39,7 @@ Name: ibus Version: 1.5.18 -Release: 12%{?dist} +Release: 13%{?dist} Summary: Intelligent Input Bus for Linux OS License: LGPLv2+ Group: System Environment/Libraries @@ -52,7 +52,6 @@ Source3: %{name}-po-1.5.18-20180627.tar.gz # Upstreamed patches. # Patch0: %%{name}-HEAD.patch Patch0: %{name}-HEAD.patch -Patch1: %{name}-1602549-covscan.patch # Under testing #1349148 #1385349 #1350291 #1406699 #1432252 #1601577 Patch2: %{name}-1385349-segv-bus-proxy.patch @@ -436,6 +435,9 @@ dconf update || : %{_datadir}/gtk-doc/html/* %changelog +* Tue Jul 24 2018 Takao Fujiwara - 1.5.18-13 +- Deleted deprecated g_mem_* APIs + * Mon Jul 23 2018 Takao Fujiwara - 1.5.18-12 - Rebuilt with RHEL code reviews