diff mbox series

[2/2] ui: Fix curses menu item label leak

Message ID 20240205130209.222045-3-npiggin@gmail.com
State New
Headers show
Series compile fix and (possible) memory leak | expand

Commit Message

Nicholas Piggin Feb. 5, 2024, 1:02 p.m. UTC
When a menu item name is updated, the old label is not freed.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
 ui/ncurses/nc-menu.c | 4 ++++
 ui/ncurses/nc-menu.h | 1 +
 2 files changed, 5 insertions(+)
diff mbox series

Patch

diff --git a/ui/ncurses/nc-menu.c b/ui/ncurses/nc-menu.c
index a1524b5..70f2210 100644
--- a/ui/ncurses/nc-menu.c
+++ b/ui/ncurses/nc-menu.c
@@ -82,6 +82,7 @@  static void pmenu_resize(struct nc_scr *scr)
 static int pmenu_item_destructor(void *arg)
 {
 	struct pmenu_item *item = arg;
+	talloc_free((char *)item->label);
 	free_item(item->nci);
 	return 0;
 }
@@ -146,7 +147,9 @@  int pmenu_item_update(struct pmenu_item *item, const char *name)
 		talloc_free((char *)label);
 		return -1;
 	}
+	talloc_free((char *)item->label);
 	free_item(item->nci);
+	item->label = label;
 	item->nci = i;
 
 	return 0;
@@ -168,6 +171,7 @@  struct pmenu_item *pmenu_item_create(struct pmenu *menu, const char *name)
 
 	item->i_sig = pb_item_sig;
 	item->pmenu = menu;
+	item->label = label;
 	item->nci = new_item(label, NULL);
 
 	if (!item->nci) {
diff --git a/ui/ncurses/nc-menu.h b/ui/ncurses/nc-menu.h
index 550c7e1..7ba45bf 100644
--- a/ui/ncurses/nc-menu.h
+++ b/ui/ncurses/nc-menu.h
@@ -46,6 +46,7 @@  struct pmenu;
 
 struct pmenu_item {
 	enum pb_nc_sig i_sig;
+	const char *label;
 	ITEM *nci;
 	struct pmenu *pmenu;
 	void *data;