diff options
author | Jonathan Gordon <rockbox@jdgordon.info> | 2007-03-18 11:01:23 +0000 |
---|---|---|
committer | Jonathan Gordon <rockbox@jdgordon.info> | 2007-03-18 11:01:23 +0000 |
commit | 5b61ebe84e3f989f28910f858836da2b496e6751 (patch) | |
tree | 2993386dbc903516cb075e6b2f498164c45c5d07 /apps/menu.c | |
parent | 01a010fd19a64f150ea95f223b1fd209c378ae57 (diff) | |
download | rockbox-5b61ebe84e3f989f28910f858836da2b496e6751.tar.gz rockbox-5b61ebe84e3f989f28910f858836da2b496e6751.zip |
Remove buffer overflow in solatiare menu
Make the old api -> new api wrapper in the menu safer.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@12831 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/menu.c')
-rw-r--r-- | apps/menu.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/apps/menu.c b/apps/menu.c index 3171e2e63f..32b50d4912 100644 --- a/apps/menu.c +++ b/apps/menu.c @@ -708,6 +708,7 @@ static void menu_talk_selected(int m) int menu_show(int m) { + int value; struct menu_item_ex menu; struct menu_get_name_and_icon menu_info = { @@ -720,7 +721,19 @@ int menu_show(int m) MENU_ITEM_COUNT(menus[m].count); menu.value = m; menu.menu_get_name_and_icon = &menu_info; - return do_menu(&menu, &menus[m].current_selection); + value = do_menu(&menu, &menus[m].current_selection); + switch (value) + { + case MENU_ATTACHED_USB: + /* case GO_TO_ROOT: */ + return MENU_ATTACHED_USB; + case GO_TO_PREVIOUS: + return MENU_SELECTED_EXIT; + default: + if (value < 0) + return menus[m].current_selection; + else return value; + } } |