summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Michael <cp.michael@samsung.com>2016-11-08 11:06:36 -0500
committerChris Michael <cp.michael@samsung.com>2016-11-08 11:06:36 -0500
commit90dabc831fa3731b7408eaa55d9b3b25ef900750 (patch)
tree3c051540f7cc7e09a59ab9ca1531314253c9e75c
parent867cf1564a615aa5a8029940a991658b5d14b338 (diff)
downloadefl-90dabc831fa3731b7408eaa55d9b3b25ef900750.tar.gz
ecore-evas-wayland: Fix use after free
Coverity reports illegal access here as we are trying to pass a freed pointer to ecore_evas_free. Rework error handling to avoid this. Fixes Coverity CID1365657 @fix Signed-off-by: Chris Michael <cp.michael@samsung.com>
-rw-r--r--src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c
index 0838a28af3..9406a989e2 100644
--- a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c
+++ b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c
@@ -2028,23 +2028,23 @@ _ecore_evas_wl_common_new_internal(const char *disp_name, unsigned int parent, i
}
ewd = ecore_wl2_display_connect(disp_name);
-
if (!ewd)
{
ERR("Failed to connect to Wayland Display %s", disp_name);
goto conn_err;
}
+
if (!(ee = calloc(1, sizeof(Ecore_Evas))))
{
ERR("Failed to allocate Ecore_Evas");
- goto err;
+ goto ee_err;
}
if (!(wdata = calloc(1, sizeof(Ecore_Evas_Engine_Wl_Data))))
{
ERR("Failed to allocate Ecore_Evas_Engine_Wl_Data");
free(ee);
- goto err;
+ goto werr;
}
if (frame) WRN("draw_frame is now deprecated and will have no effect");
@@ -2132,13 +2132,13 @@ _ecore_evas_wl_common_new_internal(const char *disp_name, unsigned int parent, i
if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
{
ERR("Failed to set Evas Engine Info for '%s'", ee->driver);
- goto err;
+ goto eng_err;
}
}
else
{
ERR("Failed to get Evas Engine Info for '%s'", ee->driver);
- goto err;
+ goto eng_err;
}
}
@@ -2162,9 +2162,12 @@ _ecore_evas_wl_common_new_internal(const char *disp_name, unsigned int parent, i
return ee;
-err:
- if (ee) ecore_evas_free(ee);
- else ecore_wl2_display_disconnect(ewd);
+eng_err:
+ ecore_evas_free(ee);
+w_err:
+ free(ee);
+ee_err:
+ ecore_wl2_display_disconnect(ewd);
conn_err:
ecore_wl2_shutdown();
return NULL;