From: Tilghman Lesher Date: Tue, 7 Dec 2010 00:07:37 +0000 (+0000) Subject: Don't create a Local channel if the target extension does not exist. X-Git-Tag: 1.4.39-rc1~3^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4369b3c4ae481c30b2c20b58042ffe689f8db1dd;p=thirdparty%2Fasterisk.git Don't create a Local channel if the target extension does not exist. (closes issue #18126) Reported by: junky Patches: followme.diff uploaded by junky (license 177) (partially restructured by me to avoid a possible memory leak) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@297689 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/apps/app_followme.c b/apps/app_followme.c index 4b93b3b105..92cabd12b7 100644 --- a/apps/app_followme.c +++ b/apps/app_followme.c @@ -801,7 +801,6 @@ static void findmeexec(struct fm_args *tpargs) break; while (nm) { - if (option_debug > 1) ast_log(LOG_DEBUG, "Number %s timeout %ld\n", nm->number,nm->timeout); @@ -815,18 +814,25 @@ static void findmeexec(struct fm_args *tpargs) rest++; } + /* We check if that context exists, before creating the ast_channel struct needed */ + if (!ast_exists_extension(caller, tpargs->context, number, 1, caller->cid.cid_num)) { + /* XXX Should probably restructure to simply skip this item, instead of returning. XXX */ + ast_log(LOG_ERROR, "Extension '%s@%s' doesn't exist\n", number, tpargs->context); + free(findme_user_list); + return; + } + if (!strcmp(tpargs->context, "")) snprintf(dialarg, sizeof(dialarg), "%s", number); else snprintf(dialarg, sizeof(dialarg), "%s@%s", number, tpargs->context); - + tmpuser = ast_calloc(1, sizeof(*tmpuser)); if (!tmpuser) { - ast_log(LOG_WARNING, "Out of memory!\n"); free(findme_user_list); return; } - + outbound = ast_request("Local", ast_best_codec(caller->nativeformats), dialarg, &dg); if (outbound) { ast_set_callerid(outbound, caller->cid.cid_num, caller->cid.cid_name, caller->cid.cid_num);