summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Gordon <rockbox@jdgordon.info>2007-03-18 11:01:23 +0000
committerJonathan Gordon <rockbox@jdgordon.info>2007-03-18 11:01:23 +0000
commit5b61ebe84e3f989f28910f858836da2b496e6751 (patch)
tree2993386dbc903516cb075e6b2f498164c45c5d07
parent01a010fd19a64f150ea95f223b1fd209c378ae57 (diff)
downloadrockbox-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.c15
-rw-r--r--apps/plugins/solitaire.c2
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)
{