elementary/entry : Fix possible memory leak problem.
authorWooHyun Jung <woohyun0705@gmail.com>
Sun, 25 Sep 2011 04:14:17 +0000 (04:14 +0000)
committerWooHyun Jung <woohyun0705@gmail.com>
Sun, 25 Sep 2011 04:14:17 +0000 (04:14 +0000)
SVN revision: 63597

src/lib/elm_entry.c

index c8ddc05d3d6da5891344f845d9130f9eb4199e57..7c5f382d6e65be1d66a6bf0508fb25d70c814fb5 100644 (file)
@@ -2792,7 +2792,7 @@ EAPI void
 elm_entry_filter_limit_size(void *data, Evas_Object *entry, char **text)
 {
    Elm_Entry_Filter_Limit_Size *lim = data;
-   char *current;
+   char *current, *utfstr;
    int len, newlen;
    const char *(*text_get)(const Evas_Object *);
    const char *widget_type;
@@ -2810,6 +2810,7 @@ elm_entry_filter_limit_size(void *data, Evas_Object *entry, char **text)
      return;
 
    current = elm_entry_markup_to_utf8(text_get(entry));
+   utfstr = elm_entry_markup_to_utf8(*text);
 
    if (lim->max_char_count > 0)
      {
@@ -2818,11 +2819,12 @@ elm_entry_filter_limit_size(void *data, Evas_Object *entry, char **text)
           {
              evas_object_smart_callback_call(entry, "maxlength,reached", NULL);
              free(*text);
-             free(current);
              *text = NULL;
+             free(current);
+             free(utfstr);
              return;
           }
-        newlen = evas_string_char_len_get(elm_entry_markup_to_utf8(*text));
+        newlen = evas_string_char_len_get(utfstr);
         if ((len + newlen) > lim->max_char_count)
           _add_chars_till_limit(entry, text, (lim->max_char_count - len), LENGTH_UNIT_CHAR);
      }
@@ -2833,15 +2835,17 @@ elm_entry_filter_limit_size(void *data, Evas_Object *entry, char **text)
           {
              evas_object_smart_callback_call(entry, "maxlength,reached", NULL);
              free(*text);
-             free(current);
              *text = NULL;
+             free(current);
+             free(utfstr);
              return;
           }
-        newlen = strlen(elm_entry_markup_to_utf8(*text));
+        newlen = strlen(utfstr);
         if ((len + newlen) > lim->max_byte_count)
           _add_chars_till_limit(entry, text, (lim->max_byte_count - len), LENGTH_UNIT_BYTE);
      }
    free(current);
+   free(utfstr);
 }
 
 EAPI void