From: Corey Farrell Date: Fri, 12 Aug 2016 04:30:27 +0000 (-0400) Subject: pbx.c: Additional fixes to ast_context_remove_extension_callerid2. X-Git-Tag: 11.24.0-rc1~35 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3e0eafa710f792a47426f21eeb46a8296224ce49;p=thirdparty%2Fasterisk.git pbx.c: Additional fixes to ast_context_remove_extension_callerid2. Do not check registrar of the first extension head. We should only check the registrar when we match the priority. Additionally fix a couple calls to strcmp which used the input callerid instead of the clean version ex.cidmatch. ASTERISK-26233 Change-Id: I17ea6881a18f40840ae9c1f5394aab1fbb3769f1 --- diff --git a/main/pbx.c b/main/pbx.c index 4da298aad9..41094c5d64 100644 --- a/main/pbx.c +++ b/main/pbx.c @@ -7444,9 +7444,11 @@ int ast_context_remove_extension_callerid2(struct ast_context *con, const char * /* scan the extension list to find first matching extension-registrar */ for (exten = con->root; exten; prev_exten = exten, exten = exten->next) { if (!strcmp(exten->exten, ex.exten) && - (!registrar || !strcmp(exten->registrar, registrar)) && - (!matchcallerid || (!ast_strlen_zero(callerid) && !ast_strlen_zero(exten->cidmatch) && !strcmp(exten->cidmatch, callerid)) || (ast_strlen_zero(callerid) && ast_strlen_zero(exten->cidmatch)))) + (!matchcallerid || + (!ast_strlen_zero(ex.cidmatch) && !ast_strlen_zero(exten->cidmatch) && !strcmp(exten->cidmatch, ex.cidmatch)) || + (ast_strlen_zero(ex.cidmatch) && ast_strlen_zero(exten->cidmatch)))) { break; + } } if (!exten) { /* we can't find right extension */ @@ -7458,7 +7460,7 @@ int ast_context_remove_extension_callerid2(struct ast_context *con, const char * /* scan the priority list to remove extension with exten->priority == priority */ for (peer = exten, next_peer = exten->peer ? exten->peer : exten->next; peer && !strcmp(peer->exten, ex.exten) && - (!callerid || (!matchcallerid && !peer->matchcid) || (matchcallerid && peer->matchcid && !strcmp(peer->cidmatch, callerid))) ; + (!callerid || (!matchcallerid && !peer->matchcid) || (matchcallerid && peer->matchcid && !strcmp(peer->cidmatch, ex.cidmatch))) ; peer = next_peer, next_peer = next_peer ? (next_peer->peer ? next_peer->peer : next_peer->next) : NULL) { if ((priority == 0 || peer->priority == priority) &&