Fix memory leak in libibus.so
authorPeng Huang <shawn.p.huang@gmail.com>
Fri, 28 Aug 2009 03:36:13 +0000 (11:36 +0800)
committerPeng Huang <shawn.p.huang@gmail.com>
Fri, 28 Aug 2009 03:36:13 +0000 (11:36 +0800)
src/ibusattribute.c
src/ibustext.c

index df4dd3354e15ee31f51fa78584660b11fe333ff3..9f0152fda58c50f2a04232e6d2ee8ba7c245181b 100644 (file)
@@ -362,6 +362,7 @@ ibus_attr_list_deserialize (IBusAttrList    *attr_list,
         ibus_message_iter_next (&array_iter);
 
         ibus_attr_list_append (attr_list, attr);
+        g_object_unref (attr);
     }
 
     ibus_message_iter_next (iter);
@@ -417,6 +418,7 @@ ibus_attr_list_append (IBusAttrList  *attr_list,
     g_return_if_fail (IBUS_IS_ATTR_LIST (attr_list));
     g_return_if_fail (IBUS_IS_ATTRIBUTE (attr));
 
+    g_object_ref (attr);
     g_array_append_val (attr_list->attributes, attr);
 }
 
index e6af1ff02a9f44453831a8a0d2b86e232e212362..f94551397977ddf28c8215129a4d19480f1f8070 100644 (file)
@@ -241,7 +241,7 @@ ibus_text_new_from_printf (const gchar *format,
         return NULL;
 
     text= g_object_new (IBUS_TYPE_TEXT, NULL);
-
+    text->is_static = FALSE;
     text->text = (gchar *)str;
 
     return text;
@@ -259,6 +259,7 @@ ibus_text_new_from_unichar (gunichar c)
 
     text= g_object_new (IBUS_TYPE_TEXT, NULL);
 
+    text->is_static = FALSE;
     text->text = (gchar *)g_malloc (12);
     len = g_unichar_to_utf8 (c, text->text);
     text->text[len] =  0;
@@ -275,17 +276,23 @@ ibus_text_append_attribute (IBusText *text,
 {
     g_assert (IBUS_IS_TEXT (text));
 
+    IBusAttribute *attr;
+
     if (end_index < 0) {
         end_index  += g_utf8_strlen(text->text, -1) + 1;
     }
 
-    if (end_index <= 0)
+    if (end_index <= 0) {
         return;
+    }
 
-    if (text->attrs == NULL)
+    if (text->attrs == NULL) {
         text->attrs = ibus_attr_list_new ();
+    }
 
-    ibus_attr_list_append (text->attrs, ibus_attribute_new (type, value, start_index, end_index));
+    attr = ibus_attribute_new (type, value, start_index, end_index);
+    ibus_attr_list_append (text->attrs, attr);
+    g_object_unref (attr);
 }
 
 guint