From 46cf643c755f3133d74e37d06a5f0c0b1074e702 Mon Sep 17 00:00:00 2001 From: Ashley Sanders Date: Tue, 28 Apr 2015 00:29:42 -0500 Subject: [PATCH] chan_pjsip: Creating Channel Causes Asterisk to Crash When Duplicate AOR Sections Exist in pjsip.conf This patch modifies the current loading strategy of the pjsip configuration. If duplicate sections (e.g. sections containing the same [id/type]) are defined in [pjsip.conf], the loader will consider the configuration for the given type as invalid when the duplicate section is encountered. The entire configuration (including what was previously loaded) for the duplicate [id/type] sections will be rejected and destroyed, an error message is logged and the load processing for the given stops. ASTERISK-24996 Reported By: Ashley Sanders Change-Id: I35090ca4cd40f1f34881dfe701a329145c347aef --- res/res_sorcery_config.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/res/res_sorcery_config.c b/res/res_sorcery_config.c index 60ecb83110..deb2ffadd8 100644 --- a/res/res_sorcery_config.c +++ b/res/res_sorcery_config.c @@ -294,6 +294,18 @@ static void sorcery_config_internal_load(void *data, const struct ast_sorcery *s continue; } + /* Confirm an object with this id does not already exist in the bucket. + * If it exists, however, the configuration is invalid so stop + * processing and destroy it. */ + obj = ao2_find(objects, id, OBJ_KEY; + + if (obj) { + ast_log(LOG_ERROR, "Config file '%s' could not be loaded; configuration contains a duplicate object: '%s' of type '%s'\n", + config->filename, id, type); + ast_config_destroy(cfg); + return; + } + if (!(obj = ast_sorcery_alloc(sorcery, type, id)) || ast_sorcery_objectset_apply(sorcery, obj, ast_category_first(category))) {