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