elementary/elm_entry : add some null checking codes.
authorwoohyun <woohyun@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Sun, 25 Sep 2011 02:56:54 +0000 (02:56 +0000)
committerwoohyun <woohyun@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Sun, 25 Sep 2011 02:56:54 +0000 (02:56 +0000)
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/elementary@63594 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/elm_entry.c

index 729af8b..1404aba 100644 (file)
@@ -1891,10 +1891,13 @@ _text_append_idler(void *data)
 static void
 _add_chars_till_limit(Evas_Object *obj, char **text, int can_add, Length_Unit unit)
 {
-   int i = 0, unit_size;
-   int current_len = strlen(*text);
-   char *new_text = *text;
+   int i = 0, current_len = 0;
+   char *new_text;
+
+   if (!*text) return;
    if (unit >= LENGTH_UNIT_LAST) return;
+   new_text = *text;
+   current_len = strlen(*text);
    while (*new_text)
      {
         if (*new_text == '<')
@@ -1908,7 +1911,8 @@ _add_chars_till_limit(Evas_Object *obj, char **text, int can_add, Length_Unit un
           }
         else
           {
-             int idx = 0;
+             int idx = 0, unit_size = 0;
+             char *markup, *utfstr;
              if (*new_text == '&')
                {
                   while (*(new_text + idx) != ';')
@@ -1917,15 +1921,21 @@ _add_chars_till_limit(Evas_Object *obj, char **text, int can_add, Length_Unit un
                        if (!*(new_text + idx)) break;
                     }
                }
-             char *markup;
              idx = evas_string_char_next_get(new_text, idx, NULL);
              markup = malloc(idx + 1);
+             if (!markup) return;
              strncpy(markup, new_text, idx);
              markup[idx] = 0;
-             if (unit == LENGTH_UNIT_BYTE)
-               unit_size = strlen(elm_entry_markup_to_utf8(markup));
-             else if (unit == LENGTH_UNIT_CHAR)
-               unit_size = evas_string_char_len_get(elm_entry_markup_to_utf8(markup));
+             utfstr = elm_entry_markup_to_utf8(markup);
+             if (utfstr)
+               {
+                  if (unit == LENGTH_UNIT_BYTE)
+                    unit_size = strlen(utfstr);
+                  else if (unit == LENGTH_UNIT_CHAR)
+                    unit_size = evas_string_char_len_get(utfstr);
+                  free(utfstr);
+                  utfstr = NULL;
+               }
              if (markup)
                {
                   free(markup);