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)); --
