summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
authorGeorge Joseph <gjoseph@digium.com>2017-05-04 15:04:46 -0600
committerGeorge Joseph <gjoseph@digium.com>2017-05-04 20:13:55 -0500
commit000183415717adae0c5ce1dd015213e7ee286dd4 (patch)
tree5cdec96dff5603fadfdf5275e81f26d276fb6322 /main
parenta20db27c561c5f481a4e84b174366fb98502b166 (diff)
app_confbridge: Fix reference to cfg in menu_template_handler
menu_template_handler wasn't properly accounting for the fact that it might be called both during a load/reload (which isn't really valid but not prevented) and by a dialplan function. In both cases it was attempting to use the "pending" config which wasn't valid in the latter case. aco_process_config is also partly to blame because it wasn't properly cleaning "pending" up when a reload was done and no changes were made. Both of these contributed to a crash if CONFBRIDGE(menu,template) was called in a dialplan after a reload. * aco_process_config now sets info->internal->pending to NULL after it unrefs it although this isn't strictly necessary in the context of this fix. * menu_template_handler now uses the "current" config and silently ignores any attempt to be called as a result of someone uses the "template" parameter in the conf file. Luckily there's no other place in the codebase where aco_pending_config is used outside of aco_process_config. ASTERISK-25506 #close Reported-by: Frederic LE FOLL Change-Id: Ib349a17d3d088f092480b19addd7122fcaac21a7
Diffstat (limited to 'main')
-rw-r--r--main/config_options.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/main/config_options.c b/main/config_options.c
index 18b04ff7d..c80777906 100644
--- a/main/config_options.c
+++ b/main/config_options.c
@@ -586,10 +586,13 @@ enum aco_process_status aco_process_ast_config(struct aco_info *info, struct aco
};
ao2_cleanup(info->internal->pending);
+ info->internal->pending = NULL;
return ACO_PROCESS_OK;
error:
ao2_cleanup(info->internal->pending);
+ info->internal->pending = NULL;
+
return ACO_PROCESS_ERROR;
}
@@ -702,6 +705,8 @@ try_alias:
end:
ao2_cleanup(info->internal->pending);
+ info->internal->pending = NULL;
+
return res;
}
int aco_process_var(struct aco_type *type, const char *cat, struct ast_variable *var, void *obj)