E17: some alloc checks, and fix a case where we lost a pointer if realloc() fails

patch by Maxime Villard (rustyBSD)

SVN revision: 75838
This commit is contained in:
Vincent Torri 2012-08-30 06:36:38 +00:00
parent 470e744c0f
commit 08aa21eea9
2 changed files with 16 additions and 7 deletions

View File

@ -209,8 +209,7 @@ e_editable_text_set(Evas_Object *editable, const char *text)
return;
if (sd->password_mode) memset(sd->text, 0, sd->char_length);
free(sd->text);
sd->text = NULL;
E_FREE(sd->text);
sd->char_length = 0;
sd->unicode_length = 0;
sd->allocated_length = -1;
@ -280,6 +279,8 @@ e_editable_text_range_get(Evas_Object *editable, int start, int end)
if (end_id <= start_id) return NULL;
range = malloc((end_id - start_id + 1) * sizeof(char));
if (!range) return NULL;
strncpy(range, &sd->text[start_id], end_id - start_id);
range[end_id - start_id] = '\0';
@ -936,12 +937,13 @@ _e_editable_text_insert(Evas_Object *editable, int pos, const char *text)
}
else
{
sd->text = realloc(sd->text, new_allocated_length + 1);
if (!sd->text)
char *p = realloc(sd->text, new_allocated_length + 1);
if (!p)
{
sd->text = old;
return 0;
}
sd->text = p;
}
sd->allocated_length = new_allocated_length;
}
@ -1080,6 +1082,8 @@ _e_editable_text_update(Evas_Object *editable)
char *text;
text = malloc((sd->unicode_length + 1) * sizeof(char));
if (!text) return;
memset(text, '*', sd->unicode_length * sizeof(char));
text[sd->unicode_length] = '\0';
edje_object_part_text_set(sd->text_object, "e.text.text", text);
@ -1202,6 +1206,8 @@ _e_editable_smart_add(Evas_Object *object)
evas_object_geometry_get(object, &ox, &oy, NULL, NULL);
sd->text = malloc((E_EDITABLE_BLOCK_SIZE + 1) * sizeof(char));
if (!sd->text) return;
sd->text[0] = '\0';
sd->char_length = 0;
sd->unicode_length = 0;

View File

@ -1314,9 +1314,12 @@ _e_typebuf_add(Evas_Object *obj, const char *s)
len = strlen(sd->typebuf.buf);
if (len + strlen(s) + 2 + 1 >= sd->typebuf.size)
{
sd->typebuf.buf = realloc(sd->typebuf.buf, sd->typebuf.size + strlen(s) + 16);
if (sd->typebuf.buf)
sd->typebuf.size = sd->typebuf.size + strlen(s) + 16;
char *p = realloc(sd->typebuf.buf, sd->typebuf.size + strlen(s) + 16);
if (p)
{
sd->typebuf.buf = p;
sd->typebuf.size = sd->typebuf.size + strlen(s) + 16;
}
else
{
_e_typebuf_clean(obj);