diff options
author | Eli Zaretskii <eliz@gnu.org> | 2022-05-23 16:54:17 +0300 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2022-05-23 16:54:17 +0300 |
commit | b3e4526f21749305b7f6b3f4a18e0df7cd0044a4 (patch) | |
tree | 0d980f1a54eb7cfb31627236e5e835f686c02b89 /src/w32menu.c | |
parent | aab560f0c1955bae57cc35a71be95b5bfa2ab525 (diff) | |
download | emacs-b3e4526f21749305b7f6b3f4a18e0df7cd0044a4.tar.gz |
* src/w32menu.c (w32_menu_show): Use SAFE_ALLOCA. (Bug#55068)
Diffstat (limited to 'src/w32menu.c')
-rw-r--r-- | src/w32menu.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/w32menu.c b/src/w32menu.c index 5cd6c3310e3..b10239d5cc6 100644 --- a/src/w32menu.c +++ b/src/w32menu.c @@ -556,10 +556,8 @@ w32_menu_show (struct frame *f, int x, int y, int menuflags, HMENU menu; POINT pos; widget_value *wv, *save_wv = 0, *first_wv = 0, *prev_wv = 0; - widget_value **submenu_stack - = (widget_value **) alloca (menu_items_used * sizeof (widget_value *)); - Lisp_Object *subprefix_stack - = (Lisp_Object *) alloca (menu_items_used * word_size); + widget_value **submenu_stack; + Lisp_Object *subprefix_stack; int submenu_depth = 0; bool first_pane; @@ -574,6 +572,11 @@ w32_menu_show (struct frame *f, int x, int y, int menuflags, return Qnil; } + USE_SAFE_ALLOCA; + + submenu_stack = SAFE_ALLOCA (menu_items_used * sizeof (widget_value *)); + subprefix_stack = SAFE_ALLOCA (menu_items_used * word_size); + block_input (); /* Create a tree of widget_value objects @@ -816,6 +819,7 @@ w32_menu_show (struct frame *f, int x, int y, int menuflags, entry = Fcons (subprefix_stack[j], entry); } unblock_input (); + SAFE_FREE (); return entry; } i += MENU_ITEMS_ITEM_LENGTH; @@ -830,6 +834,7 @@ w32_menu_show (struct frame *f, int x, int y, int menuflags, } unblock_input (); + SAFE_FREE (); return Qnil; } |