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);

-- 


Reply via email to