jpeg pushed a commit to branch master.

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

commit f3226f5e815c5bbbe070fd921b958aaa56a385df
Author: Jean-Philippe Andre <[email protected]>
Date:   Wed Oct 29 12:56:00 2014 +0900

    Evas GL: Fix potential crash
    
    Welp, it looks like this crash actually happened once even though
    it should not. glGetString() seems to have returned NULL somehow.
---
 src/modules/evas/engines/gl_common/evas_gl_api_ext.c |  9 ++++++++-
 src/modules/evas/engines/gl_common/evas_gl_api_ext.h |  2 +-
 src/modules/evas/engines/gl_common/evas_gl_core.c    | 10 ++++++++--
 3 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/src/modules/evas/engines/gl_common/evas_gl_api_ext.c 
b/src/modules/evas/engines/gl_common/evas_gl_api_ext.c
index 8b86b53..9addf61 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_api_ext.c
+++ b/src/modules/evas/engines/gl_common/evas_gl_api_ext.c
@@ -238,7 +238,7 @@ evgl_evasglWaitSync(Evas_GL *evas_gl EINA_UNUSED,
 
 static int _evgl_api_ext_status = 0;
 
-void
+Eina_Bool
 evgl_api_ext_init(void *getproc, const char *glueexts)
 {
    const char *glexts;
@@ -258,6 +258,12 @@ evgl_api_ext_init(void *getproc, const char *glueexts)
 
    // GLES Extensions
    glexts = (const char*)glGetString(GL_EXTENSIONS);
+   if (!glexts)
+     {
+        ERR("glGetString returned NULL! Something is very wrong...");
+        return EINA_FALSE;
+     }
+
    /*
    // GLUE Extensions
 #ifdef GL_GLES
@@ -352,6 +358,7 @@ re->info->info.screen);
 
 
    _evgl_api_ext_status = 1;
+   return EINA_TRUE;
 }
 
 void
diff --git a/src/modules/evas/engines/gl_common/evas_gl_api_ext.h 
b/src/modules/evas/engines/gl_common/evas_gl_api_ext.h
index 535903a..31f7873 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_api_ext.h
+++ b/src/modules/evas/engines/gl_common/evas_gl_api_ext.h
@@ -67,7 +67,7 @@
 
/////////////////////////////////////////////////////////////////////////////////////////////////////
 #define EXTENSION_SUPPORT(name) (_gl_ext_support_##name == 1)
 
-extern void evgl_api_ext_init(void *getproc, const char *glueexts);
+extern Eina_Bool evgl_api_ext_init(void *getproc, const char *glueexts);
 extern void evgl_api_ext_get(Evas_GL_API *gl_funcs);
 extern const char *evgl_api_ext_string_get();
 
diff --git a/src/modules/evas/engines/gl_common/evas_gl_core.c 
b/src/modules/evas/engines/gl_common/evas_gl_core.c
index 78ae9e0..fb56d00 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_core.c
+++ b/src/modules/evas/engines/gl_common/evas_gl_core.c
@@ -1400,9 +1400,15 @@ evgl_engine_init(void *eng_data, const EVGL_Interface 
*efunc)
 
    // Initialize Extensions
    if (efunc->proc_address_get && efunc->ext_string_get)
-      evgl_api_ext_init(efunc->proc_address_get, 
efunc->ext_string_get(eng_data));
+     {
+        if (!evgl_api_ext_init(efunc->proc_address_get, 
efunc->ext_string_get(eng_data)))
+          {
+             ERR("Extensions failed to load. This shouldn't happen, Evas GL 
load fails.");
+             goto error;
+          }
+     }
    else
-      ERR("Proc address get function not available.  Extension not 
initialized.");
+     ERR("Proc address get function not available. Extensions not 
initialized.");
 
    if (efunc->ext_string_get)
      DBG("GLUE Extension String: %s", efunc->ext_string_get(eng_data));

-- 


Reply via email to