englebass pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=0f4f0a7e5e412463b6f19aae240828b0995a58f8
commit 0f4f0a7e5e412463b6f19aae240828b0995a58f8 Author: Sebastian Dransfeld <[email protected]> Date: Thu Sep 25 09:01:12 2014 +0200 efreet: Fix leak on error If we encountered an error, special hashes in internal desktop struct wasn't free'd. --- src/lib/efreet/efreet_menu.c | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/src/lib/efreet/efreet_menu.c b/src/lib/efreet/efreet_menu.c index dcbd4ab..0bd69eb 100644 --- a/src/lib/efreet/efreet_menu.c +++ b/src/lib/efreet/efreet_menu.c @@ -651,35 +651,27 @@ efreet_menu_parse(const char *path) if (!efreet_menu_handle_menu(internal, xml)) { efreet_xml_del(xml); - efreet_menu_internal_free(internal); - return NULL; + goto error; } efreet_xml_del(xml); efreet_menu_resolve_moves(internal); if (!efreet_menu_process_dirs(internal)) - { - efreet_menu_internal_free(internal); - return NULL; - } + goto error; /* handle all .desktops */ if (!efreet_menu_process(internal, 0)) - { - efreet_menu_internal_free(internal); - return NULL; - } + goto error; /* handle menus with only unallocated .desktops */ if (!efreet_menu_process(internal, 1)) - { - efreet_menu_internal_free(internal); - return NULL; - } + goto error; /* layout menu */ entry = efreet_menu_layout_menu(internal); + +error: IF_FREE_HASH(internal->efreet_merged_menus); IF_FREE_HASH(internal->efreet_merged_dirs); efreet_menu_internal_free(internal); --
