Evas and Eolian : Freed string buffer 93/139093/2
authorjiin.moon <jiin.moon@samsung.com>
Mon, 17 Jul 2017 08:07:25 +0000 (17:07 +0900)
committerjiin.moon <jiin.moon@samsung.com>
Tue, 18 Jul 2017 05:18:42 +0000 (14:18 +0900)
Summary : String buffer returned by eina_strbuf_new() is not freed in some cases

@Fix

Signed-off-by: Uma Devika <u.bodapati@samsung.com>
Reviewers: cedric, tasn, jpeg, raster, singh.amitesh

Subscribers: tanwar.umesh07, yashu21985, cedric, jpeg

Differential Revision: https://phab.enlightenment.org/D5000

Change-Id: Ic6a20827a912621d90a15367d4cb58ef16b0e01d

src/lib/eolian/eo_parser.c
src/modules/evas/engines/gl_common/evas_gl_api_ext.c
src/tests/evas/evas_test_image.c

index d8cbcb4..6762fc5 100644 (file)
@@ -870,6 +870,7 @@ parse_typedef(Eo_Lexer *ls)
    pop_type(ls);
    check_next(ls, ';');
    FILL_DOC(ls, def, doc);
+   pop_strbuf(ls);
    return def;
 }
 
@@ -917,6 +918,7 @@ parse_variable(Eo_Lexer *ls, Eina_Bool global)
      }
    check_next(ls, ';');
    FILL_DOC(ls, def, doc);
+   pop_strbuf(ls);
    return def;
 }
 
index 52b268b..43f50c0 100644 (file)
@@ -847,6 +847,8 @@ _evgl_api_gles2_ext_init(void *getproc, const char *glueexts)
    if (!glexts)
      {
         ERR("glGetString returned NULL! Something is very wrong...");
+        eina_strbuf_free(sb);
+        eina_strbuf_free(sboff);
         return EINA_FALSE;
      }
 
@@ -1129,25 +1131,25 @@ _evgl_api_gles1_ext_init(void *getproc, const char *glueexts)
    if (!(rsc=_evgl_tls_resource_get()))
      {
         ERR("Unable to initialize GLES1 extensions. Error retrieving tls");
-        return EINA_FALSE;
+        goto error;
      }
 
    if ((dpy == EGL_NO_DISPLAY) || !rsc->current_ctx)
      {
         DBG("Unable to initialize GLES1 extensions. Engine not initialized");
-        return EINA_FALSE;
+        goto error;
      }
 
    if (!eglQueryContext(dpy, rsc->current_ctx->context, EGL_CONTEXT_CLIENT_VERSION, &context_version))
      {
         ERR("Unable to initialize GLES1 extensions. eglQueryContext failed 0x%x", eglGetError());
-        return EINA_FALSE;
+        goto error;
      }
 
    if (context_version != EVAS_GL_GLES_1_X)
      {
         DBG("GLESv1 context not bound");
-        return EINA_FALSE;
+        goto error;
      }
 #endif
 
@@ -1156,7 +1158,7 @@ _evgl_api_gles1_ext_init(void *getproc, const char *glueexts)
    if (!gles1_funcs || !gles1_funcs->glGetString)
      {
         ERR("Could not get address of glGetString in GLESv1 library!");
-        return EINA_FALSE;
+        goto error;
      }
 
    glexts = (const char *) gles1_funcs->glGetString(GL_EXTENSIONS);
@@ -1165,7 +1167,7 @@ _evgl_api_gles1_ext_init(void *getproc, const char *glueexts)
    if (!glexts)
      {
         ERR("GLESv1:glGetString(GL_EXTENSIONS) returned NULL!");
-        return EINA_FALSE;
+        goto error;
      }
 
    /////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -1354,6 +1356,10 @@ _evgl_api_gles1_ext_init(void *getproc, const char *glueexts)
    // GLESv1 version has been initialized!
    _evgl_api_ext_status |= EVASGL_API_GLES1_EXT_INITIALIZED;
    return EINA_TRUE;
+error:
+   eina_strbuf_free(sb);
+   eina_strbuf_free(sboff);
+   return EINA_FALSE;
 }
 
 void
@@ -1454,25 +1460,25 @@ _evgl_api_gles3_ext_init(void *getproc, const char *glueexts)
    if (!(rsc=_evgl_tls_resource_get()))
      {
         ERR("Unable to initialize GLES3 extensions. Error retrieving tls");
-        return EINA_FALSE;
+        goto error;
      }
 
    if ((dpy == EGL_NO_DISPLAY) || !rsc->current_ctx)
      {
         DBG("Unable to initialize GLES3 extensions. Engine not initialized");
-        return EINA_FALSE;
+        goto error;
      }
 
    if (!eglQueryContext(dpy, rsc->current_ctx->context, EGL_CONTEXT_CLIENT_VERSION, &context_version))
      {
         ERR("Unable to initialize GLES3 extensions. eglQueryContext failed 0x%x", eglGetError());
-        return EINA_FALSE;
+        goto error;
      }
 
    if (context_version != EVAS_GL_GLES_3_X)
      {
         DBG("GLESv3 context not bound");
-        return EINA_FALSE;
+        goto error;
      }
 #endif
 
@@ -1482,7 +1488,7 @@ _evgl_api_gles3_ext_init(void *getproc, const char *glueexts)
    if (!gles3_funcs || !gles3_funcs->glGetString)
      {
         ERR("Could not get address of glGetString in GLESv3 library!");
-        return EINA_FALSE;
+        goto error;
      }
 
    glexts = (const char *) gles3_funcs->glGetString(GL_EXTENSIONS);
@@ -1491,7 +1497,7 @@ _evgl_api_gles3_ext_init(void *getproc, const char *glueexts)
    if (!glexts)
      {
         ERR("GLESv3:glGetString(GL_EXTENSIONS) returned NULL!");
-        return EINA_FALSE;
+        goto error;
      }
 
    /////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -1679,6 +1685,10 @@ _evgl_api_gles3_ext_init(void *getproc, const char *glueexts)
    // GLESv3 version has been initialized!
    _evgl_api_ext_status |= EVASGL_API_GLES3_EXT_INITIALIZED;
    return EINA_TRUE;
+error:
+   eina_strbuf_free(sb);
+   eina_strbuf_free(sboff);
+   return EINA_FALSE;
 }
 
 void
index cfb0f94..8c358e3 100644 (file)
@@ -395,6 +395,8 @@ START_TEST(evas_object_image_tgv_loader_data)
    evas_object_del(obj);
    evas_object_del(ref);
 
+   eina_strbuf_free(str);
+
    evas_free(e);
    evas_shutdown();
 }