diff --git a/legacy/efreet/src/lib/efreet_menu.c b/legacy/efreet/src/lib/efreet_menu.c index 08e7010f39..f5d546527c 100644 --- a/legacy/efreet/src/lib/efreet_menu.c +++ b/legacy/efreet/src/lib/efreet_menu.c @@ -272,11 +272,11 @@ static Efreet_Desktop *efreet_menu_directory_get(Efreet_Menu_Internal *internal, const char *path); static void efreet_menu_process_filters(Efreet_Menu_Internal *internal, unsigned int only_unallocated); -static Eina_List * efreet_menu_process_app_pool(Eina_List *pool, - Eina_List *applications, - Eina_Hash *matches, - Efreet_Menu_Filter *filter, - unsigned int only_unallocated); +static Eina_List *efreet_menu_process_app_pool(Eina_List *pool, + Eina_List *applications, + Eina_Hash *matches, + Efreet_Menu_Filter *filter, + unsigned int only_unallocated); static int efreet_menu_filter_matches(Efreet_Menu_Filter_Op *op, Efreet_Menu_Desktop *md); static int efreet_menu_filter_or_matches(Efreet_Menu_Filter_Op *op, @@ -700,6 +700,7 @@ efreet_menu_parse(const char *path) /* split appart the filename and the path */ internal = efreet_menu_internal_new(); + if (!internal) return NULL; /* Set default values */ internal->show_empty = 0; @@ -1122,6 +1123,7 @@ efreet_menu_handle_sub_menu(Efreet_Menu_Internal *parent, Efreet_Xml *xml) efreet_menu_create_sub_menu_list(parent); internal = efreet_menu_internal_new(); + if (!internal) return 0; internal->file.path = eina_stringshare_add(parent->file.path); if (!efreet_menu_handle_menu(internal, xml)) { @@ -1682,6 +1684,7 @@ efreet_menu_merge(Efreet_Menu_Internal *parent, Efreet_Xml *xml, const char *pat FREE(rp); internal = efreet_menu_internal_new(); + if (!internal) return 0; efreet_menu_path_set(internal, path); efreet_menu_handle_menu(internal, merge_xml); efreet_menu_concatenate(parent, internal); @@ -1845,8 +1848,11 @@ efreet_menu_handle_legacy_dir(Efreet_Menu_Internal *parent, Efreet_Xml *xml) legacy = efreet_menu_handle_legacy_dir_helper(NULL, parent, xml->text, efreet_xml_attribute_get(xml, "prefix")); - efreet_menu_concatenate(parent, legacy); - efreet_menu_internal_free(legacy); + if (legacy) + { + efreet_menu_concatenate(parent, legacy); + efreet_menu_internal_free(legacy); + } return 1; @@ -1880,13 +1886,15 @@ efreet_menu_handle_legacy_dir_helper(Efreet_Menu_Internal *root, path = efreet_menu_path_get(parent, legacy_dir); /* nothing to do if the legacy path doesn't exist */ - if (!ecore_file_exists(path)) + if (!path || !ecore_file_exists(path)) { eina_stringshare_del(path); return NULL; } legacy_internal = efreet_menu_internal_new(); + if (!legacy_internal) + return NULL; legacy_internal->name.internal = eina_stringshare_add(ecore_file_file_get(path)); /* add the legacy dir as an app dir */ @@ -1916,6 +1924,11 @@ efreet_menu_handle_legacy_dir_helper(Efreet_Menu_Internal *root, /* setup a filter for all the conforming .desktop files in the legacy * dir */ filter = efreet_menu_filter_new(); + if (!filter) + { + efreet_menu_internal_free(legacy_internal); + return NULL; + } filter->type = EFREET_MENU_FILTER_INCLUDE; filter->op->type = EFREET_MENU_FILTER_OP_OR; @@ -2378,6 +2391,7 @@ efreet_menu_handle_filter(Efreet_Menu_Internal *parent, Efreet_Xml *xml, /* filters have a default or relationship */ filter = efreet_menu_filter_new(); + if (!filter) return 0; filter->type = type; filter->op->type = EFREET_MENU_FILTER_OP_OR; @@ -2795,8 +2809,6 @@ efreet_menu_process_app_pool(Eina_List *pool, Eina_List *applications, Efreet_Menu_Desktop *md; Eina_List *l; - if (!pool) return NULL; - EINA_LIST_FOREACH(pool, l, md) { if (eina_hash_find(matches, md->id)) continue; @@ -3121,6 +3133,7 @@ efreet_menu_resolve_moves(Efreet_Menu_Internal *internal) *path = '\0'; ancestor = efreet_menu_internal_new(); + if (!ancestor) goto error; ancestor->name.internal = eina_stringshare_add(tmp); efreet_menu_create_sub_menu_list(parent); @@ -3143,6 +3156,7 @@ efreet_menu_resolve_moves(Efreet_Menu_Internal *internal) efreet_menu_internal_free(origin); } } +error: IF_FREE_LIST(internal->moves, efreet_menu_move_free); }