]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
app_confbridge: Fix memory leak on updated menu options.
authorNaveen Albert <asterisk@phreaknet.org>
Mon, 1 Aug 2022 00:30:00 +0000 (00:30 +0000)
committerGeorge Joseph <gjoseph@digium.com>
Mon, 8 Aug 2022 10:20:06 +0000 (05:20 -0500)
If the CONFBRIDGE function is used to dynamically set
menu options, a memory leak occurs when a menu option
that has been set is overridden, since the menu entry
is not destroyed before being freed. This ensures that
it is.

Additionally, logic that duplicates the destroy function
is removed in lieu of the destroy function itself.

ASTERISK-28422 #close

Change-Id: I71cfb5c24e636984d41086d1333a416dc12ff995

apps/confbridge/conf_config_parser.c

index b27adf24ab32a63923461f6155dc3765141ae236..d04bcf9dcb84fefd6fa2cdb00fe1af2a5a3694b8 100644 (file)
@@ -1440,10 +1440,7 @@ static int add_menu_entry(struct conf_menu *menu, const char *dtmf, const char *
 
        /* if adding any of the actions failed, bail */
        if (res) {
-               struct conf_menu_action *menu_action;
-               while ((menu_action = AST_LIST_REMOVE_HEAD(&menu_entry->actions, action))) {
-                       ast_free(menu_action);
-               }
+               conf_menu_entry_destroy(menu_entry);
                ast_free(menu_entry);
                return -1;
        }
@@ -1452,6 +1449,7 @@ static int add_menu_entry(struct conf_menu *menu, const char *dtmf, const char *
        AST_LIST_TRAVERSE_SAFE_BEGIN(&menu->entries, cur, entry) {
                if (!strcasecmp(cur->dtmf, menu_entry->dtmf)) {
                        AST_LIST_REMOVE_CURRENT(entry);
+                       conf_menu_entry_destroy(cur);
                        ast_free(cur);
                        break;
                }