From 438a7abc279bbcd6e0e770b72d5023555a86c7fd Mon Sep 17 00:00:00 2001 From: Matthew Jordan Date: Sun, 16 Feb 2014 03:25:15 +0000 Subject: pbx: Handle a completely empty dialplan during a context merge It is highly unlikely, but - at least in Asterisk 12 - theoretically possible to load Asterisk with no dialplan whatsoever. If that occurs, and some other module (that is not a pbx module) attempts to merge its contexts into the dialplan, the existing merge routine will crash. This is because it is not insane, and rightly believes that you provided some sort of dialplan, somewhere. This patch will gracefully merge the contexts in such a case. Note that this is highly unlikely to occur in 1.8/11, as features will most likely provide some dialplan via parking. However, in Asterisk 12, parking is now provided by res_parking, and hence may create its dialplan later. (closes issue ASTERISK-23297) Reported by: CJ Oster Review: https://reviewboard.asterisk.org/r/3222 ........ Merged revisions 408200 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 408201 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 408220 from http://svn.asterisk.org/svn/asterisk/branches/12 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@408227 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- main/pbx.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/main/pbx.c b/main/pbx.c index 65865ff16..734b9eef2 100644 --- a/main/pbx.c +++ b/main/pbx.c @@ -8804,6 +8804,16 @@ void ast_merge_contexts_and_delete(struct ast_context **extcontexts, struct ast_ begintime = ast_tvnow(); ast_mutex_lock(&context_merge_lock);/* Serialize ast_merge_contexts_and_delete */ ast_wrlock_contexts(); + + if (!contexts_table) { + /* Well, that's odd. There are no contexts. */ + contexts_table = exttable; + contexts = *extcontexts; + ast_unlock_contexts(); + ast_mutex_unlock(&context_merge_lock); + return; + } + iter = ast_hashtab_start_traversal(contexts_table); while ((tmp = ast_hashtab_next(iter))) { context_merge(extcontexts, exttable, tmp, registrar); -- cgit v1.2.3