controls: avoid uses after free

CID1422109
CID1422110
CID1422111
This commit is contained in:
Boris Faure 2020-04-06 23:11:10 +02:00
parent 6411f119ce
commit 4c9091c9c6
Signed by untrusted user who does not match committer: borisfaure
GPG Key ID: 35C0410516166BE8
4 changed files with 32 additions and 15 deletions

View File

@ -22,11 +22,10 @@ typedef struct _Controls_Ctx {
} Controls_Ctx;
/* /!\ can free ctx */
static void
controls_hide(Controls_Ctx *ctx, Eina_Bool call_cb);
static void
_cb_sel_on(void *data,
Evas_Object *_term EINA_UNUSED,
@ -80,6 +79,8 @@ _cb_ct_copy(void *data,
Evas_Object *term = ctx->term;
controls_hide(ctx, EINA_TRUE);
ctx = NULL;
termio_take_selection(term, ELM_SEL_TYPE_CLIPBOARD);
}
@ -92,6 +93,8 @@ _cb_ct_paste(void *data,
Evas_Object *term = ctx->term;
controls_hide(ctx, EINA_TRUE);
ctx = NULL;
termio_paste_selection(term, ELM_SEL_TYPE_CLIPBOARD);
}
@ -101,8 +104,12 @@ _cb_ct_new(void *data,
void *_event EINA_UNUSED)
{
Controls_Ctx *ctx = data;
Evas_Object *term = ctx->term;
controls_hide(ctx, EINA_TRUE);
main_new(ctx->term);
ctx = NULL;
main_new(term);
}
static void
@ -111,8 +118,13 @@ _cb_ct_split_v(void *data,
void *_event EINA_UNUSED)
{
Controls_Ctx *ctx = data;
Evas_Object *term = ctx->term;
controls_hide(ctx, EINA_TRUE);
split_vertically(ctx->win, ctx->term, NULL);
ctx = NULL;
split_vertically(term, NULL);
}
static void
@ -121,8 +133,12 @@ _cb_ct_split_h(void *data,
void *_event EINA_UNUSED)
{
Controls_Ctx *ctx = data;
Evas_Object *term = ctx->term;
controls_hide(ctx, EINA_TRUE);
split_horizontally(ctx->win, ctx->term, NULL);
ctx = NULL;
split_horizontally(term, NULL);
}
static void
@ -141,7 +157,10 @@ _cb_ct_set_title(void *data,
{
Controls_Ctx *ctx = data;
Evas_Object *term = ctx->term;
controls_hide(ctx, EINA_TRUE);
ctx = NULL;
term_set_title(termio_term_get(term));
}
@ -155,6 +174,8 @@ _cb_ct_close(void *data,
Evas_Object *win = ctx->win;
controls_hide(ctx, EINA_TRUE);
ctx = NULL;
term_close(win, term, EINA_FALSE);
}

View File

@ -624,16 +624,14 @@ _start(Ipc_Instance *instance, Eina_Bool need_scale_wizard)
if (instance->startup_split[i] == 'v')
{
cmd = eina_list_data_get(instance->cmds);
split_vertically(win_evas_object_get(term_win_get(next)),
term_termio_get(next), cmd);
split_vertically(term_termio_get(next), cmd);
instance->cmds = eina_list_remove_list(instance->cmds,
instance->cmds);
}
else if (instance->startup_split[i] == 'h')
{
cmd = eina_list_data_get(instance->cmds);
split_horizontally(win_evas_object_get(term_win_get(next)),
term_termio_get(next), cmd);
split_horizontally(term_termio_get(next), cmd);
instance->cmds = eina_list_remove_list(instance->cmds,
instance->cmds);
}

View File

@ -3049,8 +3049,7 @@ _cb_size_hint(void *data,
}
void
split_horizontally(Evas_Object *_win EINA_UNUSED,
Evas_Object *term,
split_horizontally(Evas_Object *term,
const char *cmd)
{
Term *tm;
@ -3064,8 +3063,7 @@ split_horizontally(Evas_Object *_win EINA_UNUSED,
}
void
split_vertically(Evas_Object *_win EINA_UNUSED,
Evas_Object *term,
split_vertically(Evas_Object *term,
const char *cmd)
{
Term *tm;

View File

@ -18,8 +18,8 @@ void term_set_title(Term *term);
void term_miniview_hide(Term *term);
Eina_Bool term_tab_go(Term *term, int tnum);
void split_horizontally(Evas_Object *win, Evas_Object *term, const char *cmd);
void split_vertically(Evas_Object *win, Evas_Object *term, const char *cmd);
void split_horizontally(Evas_Object *term, const char *cmd);
void split_vertically(Evas_Object *term, const char *cmd);
Win *