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 | |
| parent | 01a010fd19a64f150ea95f223b1fd209c378ae57 (diff) | |
| download | rockbox-5b61ebe84e3f989f28910f858836da2b496e6751.zip rockbox-5b61ebe84e3f989f28910f858836da2b496e6751.tar.gz rockbox-5b61ebe84e3f989f28910f858836da2b496e6751.tar.bz2 rockbox-5b61ebe84e3f989f28910f858836da2b496e6751.tar.xz | |
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
| -rw-r--r-- | apps/menu.c | 15 | ||||
| -rw-r--r-- | apps/plugins/solitaire.c | 2 |
2 files changed, 15 insertions, 2 deletions
diff --git a/apps/menu.c b/apps/menu.c index 3171e2e..32b50d4 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; + } } diff --git a/apps/plugins/solitaire.c b/apps/plugins/solitaire.c index b6bf23c..da6ca3c 100644 --- a/apps/plugins/solitaire.c +++ b/apps/plugins/solitaire.c @@ -593,7 +593,7 @@ int solitaire_menu(bool in_game) int result = -1; int i = 0; - struct menu_item items[5]; + struct menu_item items[6]; if (in_game) { |