evas: ++safety 64/261264/2
authorMichal Szczecinski <m.szczecinsk@partner.samsung.com>
Wed, 14 Jul 2021 06:42:18 +0000 (08:42 +0200)
committerHermet Park <chuneon.park@samsung.com>
Wed, 14 Jul 2021 11:32:11 +0000 (11:32 +0000)
Added null pointer dereference checkers for evas mask object.

Change-Id: Ie8fef77982bfb8883ec208ab0e0f06b1efe6283c

src/lib/evas/canvas/evas_clip.c
src/lib/evas/canvas/evas_object_image.c
src/lib/evas/canvas/evas_object_main.c
src/lib/evas/canvas/evas_render.c

index af8d4d2..6402b71 100644 (file)
@@ -194,6 +194,7 @@ static void
 _efl_canvas_object_clipper_mask_unset(Evas_Object_Protected_Data *obj)
 {
    EVAS_OBJECT_DATA_VALID_CHECK(obj);
+   if (!obj->mask) return;
    if (!obj->mask->is_mask) return;
    if (obj->clip.clipees) return;
 
index cff145a..908a810 100755 (executable)
@@ -2195,6 +2195,8 @@ evas_object_image_render(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj, v
 {
    Evas_Image_Data *o = type_private_data;
 
+   if (!obj->mask) return;
+
    /* image is not ready yet, skip rendering. Leave it to next frame */
    if (o->preload == EVAS_IMAGE_PRELOADING) return;
 
index d81d4d9..55ace3c 100644 (file)
@@ -472,7 +472,7 @@ evas_object_free(Evas_Object_Protected_Data *obj, Eina_Bool clean_layer)
           map_write->surface = NULL;
         EINA_COW_WRITE_END(evas_object_map_cow, obj->map, map_write);
      }
-   if (obj->mask->is_mask)
+   if (obj->mask && obj->mask->is_mask)
      {
         EINA_COW_WRITE_BEGIN(evas_object_mask_cow, obj->mask, Evas_Object_Mask_Data, mask)
           mask->is_mask = EINA_FALSE;
@@ -1894,7 +1894,7 @@ _hide(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj)
      }
    EINA_COW_STATE_WRITE_END(obj, state_write, cur);
 
-   if (obj->mask->is_mask)
+   if (obj->mask && obj->mask->is_mask)
      {
         if (obj->mask->surface ||
             obj->mask->w || obj->mask->h ||
index 077fcea..2d31ce0 100644 (file)
@@ -405,6 +405,8 @@ _evas_mask_redraw_set(Evas_Public_Data *e EINA_UNUSED,
    Evas_Object_Protected_Data *clippee;
    Eina_List *l;
 
+   if (!obj->mask) return;
+
    if (!(obj->mask->redraw))
      {
         EINA_COW_WRITE_BEGIN(evas_object_mask_cow, obj->mask,
@@ -2352,7 +2354,7 @@ evas_render_mapped(Evas_Public_Data *evas, Evas_Object *eo_obj,
                     {
                        Evas_Object_Protected_Data *mask = obj->clip.mask;
 
-                       if (obj->mask->surface != surface)
+                       if (obj->mask && obj->mask->surface != surface)
                          {
                             if (proxy_src_clip)
                               {
@@ -3645,6 +3647,7 @@ evas_render_updates_internal(Evas *eo_e,
                       ((obj->func->has_opaque_rect) &&
                        (obj->func->has_opaque_rect(eo_obj, obj, obj->private_data)))) &&
                      evas_object_is_visible(obj) &&
+                     (!obj->mask) &&
                      (!obj->mask->is_mask) && (!obj->clip.mask) &&
                      (!obj->delete_me)))
           OBJ_ARRAY_PUSH(&e->obscuring_objects, obj);
@@ -4490,7 +4493,7 @@ _evas_canvas_render_dump(Eo *eo_e EINA_UNUSED, Evas_Public_Data *evas)
                     }
                   EINA_COW_WRITE_END(evas_object_proxy_cow, obj->proxy, proxy_write);
                }
-             if (obj->mask->surface)
+             if (obj->mask && obj->mask->surface)
                {
                   EINA_COW_WRITE_BEGIN(evas_object_mask_cow, obj->mask, Evas_Object_Mask_Data, mdata)
                     {