diff --git a/menu/cbs/menu_cbs_iterate.c b/menu/cbs/menu_cbs_iterate.c index 36ae82fc22..7ff85d27ae 100644 --- a/menu/cbs/menu_cbs_iterate.c +++ b/menu/cbs/menu_cbs_iterate.c @@ -541,7 +541,9 @@ static int action_iterate_main(const char *label, unsigned action) do_pop_stack = true; break; case ITERATE_TYPE_DEFAULT: - selected = menu_navigation_get_current_selection(); + selected = menu_navigation_get_current_selection(); + selected = max(min(selected, menu_list_get_size(menu_list)-1), 0); + menu_entry_get(&entry, selected, NULL, false); ret = menu_entry_action(&entry, selected, (enum menu_action)action); diff --git a/menu/menu_driver.c b/menu/menu_driver.c index afd07df8bf..7f9389d723 100644 --- a/menu/menu_driver.c +++ b/menu/menu_driver.c @@ -197,9 +197,13 @@ void menu_driver_list_free(file_list_t *list, size_t idx, size_t list_size) void menu_driver_list_clear(file_list_t *list) { const menu_ctx_driver_t *driver = menu_ctx_driver_get_ptr(); + unsigned i; if (driver->list_clear) driver->list_clear(list); + + for (i = 0; i < list->size; i++) + file_list_free_actiondata(list, i); } void menu_driver_context_destroy(void)