diff options
author | Chris Michael <cp.michael@samsung.com> | 2016-11-08 11:06:36 -0500 |
---|---|---|
committer | Chris Michael <cp.michael@samsung.com> | 2016-11-08 11:06:36 -0500 |
commit | 90dabc831fa3731b7408eaa55d9b3b25ef900750 (patch) | |
tree | 3c051540f7cc7e09a59ab9ca1531314253c9e75c | |
parent | 867cf1564a615aa5a8029940a991658b5d14b338 (diff) | |
download | efl-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.c | 19 |
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; |