e_comp_object: Set null to data of image object if there is no data in pixmap. 30/69830/3
authorSeunghun Lee <shiin.lee@samsung.com>
Mon, 16 May 2016 11:59:11 +0000 (20:59 +0900)
committerSeunghun Lee <shiin.lee@samsung.com>
Thu, 2 Jun 2016 04:52:56 +0000 (13:52 +0900)
this patch is to avoid crash of enlightenment, when access the data of buffer
which is already destroyed.

Change-Id: Ieb812e9bf551d4856565df01274a5489df8b5ef5

src/bin/e_comp_object.c

index 28c1194c8cab6a63312023b89a899fda13649d12..611785735bd7060f66cb94f0d62bc39a9644d41a 100644 (file)
@@ -3737,19 +3737,21 @@ e_comp_object_render(Evas_Object *obj)
           }
         else
           ret = EINA_TRUE;
-        /* set pixel data */
-        evas_object_image_data_set(cw->obj, cw->blanked ? NULL : pix);
         goto end;
      }
 
    pix = evas_object_image_data_get(cw->obj, EINA_TRUE);
    stride = evas_object_image_stride_get(cw->obj);
    srcpix = e_pixmap_image_data_get(cw->ec->pixmap);
-
    if (!srcpix)
      {
         e_pixmap_image_refresh(cw->ec->pixmap);
         srcpix = e_pixmap_image_data_get(cw->ec->pixmap);
+        if (!srcpix)
+          {
+             pix = NULL;
+             goto end;
+          }
      }
 
    EINA_ITERATOR_FOREACH(it, r)
@@ -3758,11 +3760,15 @@ e_comp_object_render(Evas_Object *obj)
         e_pixmap_image_data_argb_convert(cw->ec->pixmap, pix, srcpix, r, stride);
         RENDER_DEBUG("UPDATE [%p]: %d %d %dx%d -- pix = %p", cw->ec, r->x, r->y, r->w, r->h, pix);
      }
-   evas_object_image_data_set(cw->obj, cw->blanked ? NULL : pix);
+
 end:
+   /* set pixel data */
+   evas_object_image_data_set(cw->obj, cw->blanked ? NULL : pix);
+   _e_comp_object_alpha_set(cw);
    EINA_LIST_FOREACH(cw->obj_mirror, l, o)
      {
         evas_object_image_data_set(o, pix);
+        evas_object_image_alpha_set(o, evas_object_image_alpha_get(cw->obj));
         evas_object_image_pixels_dirty_set(o, EINA_FALSE);
      }