From 0f4f0a7e5e412463b6f19aae240828b0995a58f8 Mon Sep 17 00:00:00 2001 From: Sebastian Dransfeld Date: Thu, 25 Sep 2014 09:01:12 +0200 Subject: [PATCH] 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 dcbd4ab22a..0bd69eb4ca 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);