From d7e6f3a7a8dcc879f7478f262e522764c4d6dfa8 Mon Sep 17 00:00:00 2001 From: tokyo4j Date: Thu, 14 Nov 2024 00:25:49 +0900 Subject: [PATCH] menu: invalidate nested duplicated menus Prior to this commit, nesting the same menus caused stack overflow at `close_all_submenus()` when trying to open it. --- src/menu/menu.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/menu/menu.c b/src/menu/menu.c index 045d310a..966601eb 100644 --- a/src/menu/menu.c +++ b/src/menu/menu.c @@ -663,6 +663,17 @@ handle_menu_element(xmlNode *n, struct server *server) } struct menu *menu = menu_get_by_id(server, id); + + struct menu *iter = current_menu; + while (iter) { + if (iter == menu) { + wlr_log(WLR_ERROR, "menus with the same id '%s' " + "cannot be nested", id); + goto error; + } + iter = iter->parent; + } + if (menu) { current_item = item_create(current_menu, menu->label, true); if (current_item) {