forked from enlightenment/efl
efl_ui_internal_text_interactive: prevent from freed memory accessing
If node_format_remove_pair frees node, then next for loop can lead invalid memory accessing. This patch prevents from that case by keeping the next node before freeing.
This commit is contained in:
parent
deb4cc8965
commit
4efaebfc70
|
@ -158,21 +158,25 @@ Eina_Bool
|
||||||
_entry_hide_visible_password(Eo *obj)
|
_entry_hide_visible_password(Eo *obj)
|
||||||
{
|
{
|
||||||
Eina_Bool b_ret = EINA_FALSE;
|
Eina_Bool b_ret = EINA_FALSE;
|
||||||
const Evas_Object_Textblock_Node_Format *node;
|
const Evas_Object_Textblock_Node_Format *node, *node_next;
|
||||||
node = evas_textblock_node_format_first_get(obj);
|
node = evas_textblock_node_format_first_get(obj);
|
||||||
for (; node; node = evas_textblock_node_format_next_get(node))
|
|
||||||
|
if (!node) return EINA_FALSE;
|
||||||
|
|
||||||
|
do
|
||||||
{
|
{
|
||||||
|
node_next = evas_textblock_node_format_next_get(node);
|
||||||
const char *text = evas_textblock_node_format_text_get(node);
|
const char *text = evas_textblock_node_format_text_get(node);
|
||||||
if (text)
|
if (text)
|
||||||
{
|
{
|
||||||
if (!strcmp(text, "+ password=off"))
|
if (!strcmp(text, "+ password=off"))
|
||||||
{
|
{
|
||||||
evas_textblock_node_format_remove_pair(obj,
|
evas_textblock_node_format_remove_pair(obj, (Evas_Object_Textblock_Node_Format *)node);
|
||||||
(Evas_Object_Textblock_Node_Format *)node);
|
|
||||||
b_ret = EINA_TRUE;
|
b_ret = EINA_TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
node = node_next;
|
||||||
|
} while (node);
|
||||||
|
|
||||||
return b_ret;
|
return b_ret;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue