evas: improved safety of evas_object_pointer_grab_del 03/301103/2 accepted/tizen/unified/20231110.172141
authorPatryk Kaczmarek <patryk.k@partner.samsung.com>
Wed, 8 Nov 2023 12:21:34 +0000 (13:21 +0100)
committerPatryk Kaczmarek <patryk.k@partner.samsung.com>
Wed, 8 Nov 2023 13:14:12 +0000 (14:14 +0100)
Change-Id: Id587008fd2418b31749100d6ca65061530b45c53

src/lib/evas/canvas/evas_object_main.c

index 2a0bc5e..a3fa9f9 100644 (file)
@@ -129,14 +129,19 @@ void
 evas_object_pointer_grab_del(Evas_Object_Protected_Data *obj,
                              Evas_Object_Pointer_Data *pdata)
 {
+   if (!EVAS_OBJECT_DATA_ALIVE(obj)) goto on_error;
+
    //TIZEN_ONLY(20220304): evas: ++safety
    if ((pdata->mouse_grabbed > 0) && (obj->layer) && (obj->layer->evas) && (pdata->evas_pdata) && (pdata->evas_pdata->seat))
      pdata->evas_pdata->seat->mouse_grabbed -= pdata->mouse_grabbed;
 
    //TIZEN_ONLY(20220304): evas: ++safety
-   if (((pdata->mouse_in && pdata->evas_pdata && pdata->evas_pdata->seat && pdata->evas_pdata->seat->mouse_grabbed == 0) ||
+   if (((pdata->mouse_in && pdata->evas_pdata &&
+        pdata->evas_pdata->seat &&
+        pdata->evas_pdata->seat->mouse_grabbed == 0) ||
         (pdata->mouse_grabbed > 0)) &&
-       (obj->layer) && (obj->layer->evas))
+        (obj->layer) &&
+        (obj->layer->evas))
      {
     //TIZEN_ONLY(20220318): evas: ++safety, null defect fix
         if(pdata->evas_pdata && pdata->evas_pdata->seat)
@@ -152,6 +157,11 @@ evas_object_pointer_grab_del(Evas_Object_Protected_Data *obj,
      }
 
    free(pdata);
+   return;
+
+ on_error:
+   ERR("pointer_grab_del:data not valid");
+   if (pdata) free(pdata);
 }
 
 static Evas_Object_Pointer_Data *