cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=c436cf693148cf6a9912c605d35ed6566e68bbed

commit c436cf693148cf6a9912c605d35ed6566e68bbed
Author: Cedric BAIL <ced...@osg.samsung.com>
Date:   Fri Aug 25 10:50:59 2017 -0700

    evas: gl_common should not segv on freeing a NULL gl_image.
---
 src/modules/evas/engines/gl_common/evas_gl_image.c         | 4 +++-
 src/modules/evas/engines/gl_generic/evas_ector_gl_buffer.c | 2 +-
 src/modules/evas/engines/gl_generic/evas_engine.c          | 9 ++++-----
 3 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/src/modules/evas/engines/gl_common/evas_gl_image.c 
b/src/modules/evas/engines/gl_common/evas_gl_image.c
index cea4b1cdff..fe8aa5b62a 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_image.c
+++ b/src/modules/evas/engines/gl_common/evas_gl_image.c
@@ -766,6 +766,8 @@ evas_gl_common_image_cache_flush(Evas_Engine_GL_Context *gc)
 EAPI void
 evas_gl_common_image_free(Evas_GL_Image *im)
 {
+   if (!im) return ;
+
    im->references--;
    if (im->references > 0) return;
 
@@ -794,7 +796,7 @@ evas_gl_common_image_free(Evas_GL_Image *im)
 
    if (im->cs.data)
      {
-       if (!im->cs.no_free) free(im->cs.data);
+        if (!im->cs.no_free) free(im->cs.data);
      }
    if (im->cached)
      {
diff --git a/src/modules/evas/engines/gl_generic/evas_ector_gl_buffer.c 
b/src/modules/evas/engines/gl_generic/evas_ector_gl_buffer.c
index 84087a5657..2bd9cb33dc 100644
--- a/src/modules/evas/engines/gl_generic/evas_ector_gl_buffer.c
+++ b/src/modules/evas/engines/gl_generic/evas_ector_gl_buffer.c
@@ -134,7 +134,7 @@ _evas_ector_gl_buffer_gl_buffer_prepare(Eo *obj, 
Evas_Ector_GL_Buffer_Data *pd,
    return;
 
 on_fail:
-   if (pd->glim) evas_gl_common_image_free(pd->glim);
+   evas_gl_common_image_free(pd->glim);
    pd->glim = NULL;
 }
 
diff --git a/src/modules/evas/engines/gl_generic/evas_engine.c 
b/src/modules/evas/engines/gl_generic/evas_engine.c
index b437999219..2fec3e578c 100644
--- a/src/modules/evas/engines/gl_generic/evas_engine.c
+++ b/src/modules/evas/engines/gl_generic/evas_engine.c
@@ -2172,8 +2172,7 @@ eng_context_clip_image_unset(void *engine EINA_UNUSED, 
void *context)
    RGBA_Draw_Context *ctx = context;
    Evas_GL_Image *im = ctx->clip.mask;
 
-   if (im)
-     evas_gl_common_image_free(im);
+   evas_gl_common_image_free(im);
 
    ctx->clip.mask = NULL;
 }
@@ -2584,7 +2583,7 @@ eng_ector_free(void *engine_data)
 {
    Evas_GL_Ector *r = engine_data;
 
-   if (r->gl) evas_gl_common_image_free(r->gl);
+   evas_gl_common_image_free(r->gl);
    if (r->tofree) free(r->software);
    free(r);
 }
@@ -2610,7 +2609,7 @@ eng_ector_begin(void *engine, void *context EINA_UNUSED, 
Ector_Surface *ector,
           {
              int err = EVAS_LOAD_ERROR_NONE;
 
-             if (buffer->gl) evas_gl_common_image_free(buffer->gl);
+             evas_gl_common_image_free(buffer->gl);
              if (buffer->tofree) free(buffer->software);
              buffer->software = NULL;
 
@@ -2780,7 +2779,7 @@ eng_image_data_unmap(void *engine EINA_UNUSED, void 
*image, const Eina_Rw_Slice
                       (map->mode & EFL_GFX_BUFFER_ACCESS_MODE_WRITE))
                     evas_gl_common_texture_update(im->tex, im->im);
                   im->maps = eina_inlist_remove(im->maps, 
EINA_INLIST_GET(map));
-                  if (map->glim) evas_gl_common_image_free(map->glim);
+                  evas_gl_common_image_free(map->glim);
                   free(map);
                }
              return found;

-- 


Reply via email to