raster pushed a commit to branch efl-1.22. http://git.enlightenment.org/core/efl.git/commit/?id=0af9c345cc74e4658a692e43feb2bb8d3a68f092
commit 0af9c345cc74e4658a692e43feb2bb8d3a68f092 Author: Carsten Haitzler (Rasterman) <[email protected]> Date: Wed Jul 31 14:05:06 2019 +0100 evas events - fix segv if pointer data is freed by cb callback can free what is in context. avoid that problem @fix --- src/lib/evas/canvas/evas_events.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/lib/evas/canvas/evas_events.c b/src/lib/evas/canvas/evas_events.c index ee31ef5ac2..5994eb9efd 100644 --- a/src/lib/evas/canvas/evas_events.c +++ b/src/lib/evas/canvas/evas_events.c @@ -2187,6 +2187,8 @@ _canvas_event_feed_mouse_move_internal(Evas_Public_Data *e, Efl_Input_Pointer_Da copy = evas_event_list_copy(pdata->seat->object.in); EINA_LIST_FOREACH(copy, l, eo_obj) { + Eina_Bool check_nogrep = EINA_FALSE; + obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS); obj_pdata = _evas_object_pointer_data_get(pdata, obj); if (!obj_pdata) @@ -2195,6 +2197,9 @@ _canvas_event_feed_mouse_move_internal(Evas_Public_Data *e, Efl_Input_Pointer_Da ev->device); continue; } + if ((obj_pdata->pointer_mode == EVAS_OBJECT_POINTER_MODE_NOGRAB_NO_REPEAT_UPDOWN) && + (pdata->seat->nogrep > 0)) + check_nogrep = EINA_TRUE; if ((!e->is_frozen) && _evas_event_object_pointer_allow(eo_obj, obj, obj_pdata) && (!evas_object_is_source_invisible(eo_obj, obj) || @@ -2212,8 +2217,7 @@ _canvas_event_feed_mouse_move_internal(Evas_Public_Data *e, Efl_Input_Pointer_Da } else outs = eina_list_append(outs, eo_obj); - if ((obj_pdata->pointer_mode == EVAS_OBJECT_POINTER_MODE_NOGRAB_NO_REPEAT_UPDOWN) && - (pdata->seat->nogrep > 0)) + if (check_nogrep) { eina_list_free(copy); eina_list_free(outs); --
