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);

-- 


Reply via email to