From b304ddcf7a2c4ade0167c78de92ca28da7feaf78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Higor=20Eur=C3=ADpedes?= Date: Mon, 15 Jun 2015 14:18:06 -0300 Subject: [PATCH] Fix menu_driver_list_insert leaks --- menu/cbs/menu_cbs_iterate.c | 4 +++- menu/menu_driver.c | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) 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)