From c757c676428d70d854c3c7c637b8b7e7a8697043 Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Wed, 23 Nov 2016 09:41:33 +0100 Subject: menu: sanitize menu_add_title passing a string to menu_add_title() which then gets free by this function is just plain ugly. Pass it a const char * which gets duplicated in menu_add_title() when necessary. Signed-off-by: Sascha Hauer --- commands/menu.c | 2 +- common/boot.c | 2 +- common/menu.c | 12 +++++------- include/menu.h | 2 +- 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/commands/menu.c b/commands/menu.c index 72db26e5d1..ddc9c3ab86 100644 --- a/commands/menu.c +++ b/commands/menu.c @@ -147,7 +147,7 @@ static int do_menu_add(struct cmd_menu *cm) if (!m->name) goto free; - menu_add_title(m, strdup(cm->description)); + menu_add_title(m, cm->description); ret = menu_add(m); diff --git a/common/boot.c b/common/boot.c index 123b874b3c..4306319331 100644 --- a/common/boot.c +++ b/common/boot.c @@ -44,7 +44,7 @@ struct bootentries *bootentries_alloc(void) if (IS_ENABLED(CONFIG_MENU)) { bootentries->menu = menu_alloc(); - menu_add_title(bootentries->menu, basprintf("boot")); + menu_add_title(bootentries->menu, "boot"); } return bootentries; diff --git a/common/menu.c b/common/menu.c index 64df458e68..e757216c5a 100644 --- a/common/menu.c +++ b/common/menu.c @@ -526,18 +526,17 @@ EXPORT_SYMBOL(menu_add_command_entry); * @display: NULL or pointer to the string which will be freed in this function. * If NULL or zero length string is provided, default title will be added. */ -void menu_add_title(struct menu *m, char *display) +void menu_add_title(struct menu *m, const char *display) { char *tmp, *src, *dst; int lines = 1; int i; - if (!display || !strlen(display)) { - free(display); - display = xasprintf("Menu : %s", m->name ? m->name : ""); - } + if (!display || !strlen(display)) + src = dst = tmp = xasprintf("Menu : %s", m->name ? m->name : ""); + else + src = dst = tmp = xstrdup(display); - src = dst = tmp = xstrdup(display); /* Count lines and separate single string into multiple strings */ while (*src) { if (*src == '\\') { @@ -575,6 +574,5 @@ void menu_add_title(struct menu *m, char *display) } free(tmp); - free(display); } EXPORT_SYMBOL(menu_add_title); diff --git a/include/menu.h b/include/menu.h index 3e704a8907..2fef064499 100644 --- a/include/menu.h +++ b/include/menu.h @@ -91,7 +91,7 @@ int menu_set_selected_entry(struct menu *m, struct menu_entry* me); int menu_set_selected(struct menu *m, int num); int menu_set_auto_select(struct menu *m, int delay); struct menu* menu_get_menus(void); -void menu_add_title(struct menu *m, char *display); +void menu_add_title(struct menu *m, const char *display); /* * menu entry functions -- cgit v1.2.3