From d3834e4a855699046a3da755bcd3c29d484d83d2 Mon Sep 17 00:00:00 2001 From: Richard Mudgett Date: Fri, 7 Feb 2014 20:46:04 +0000 Subject: [PATCH] chan_iax2: Add some more iaxs[] NULL checks to a routine already full of them. ........ Merged revisions 407764 from http://svn.asterisk.org/svn/asterisk/branches/1.8 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/11@407765 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_iax2.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index f34b9cf478..64f50f2c77 100644 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -11867,8 +11867,10 @@ immediatedial: fr->ts = (iaxs[fr->callno]->last & 0xFFFF0000L) | ntohs(mh->ts); /* FIXME? Surely right here would be the right place to undo timestamp wraparound? */ } + /* Don't pass any packets until we're started */ - if (!ast_test_flag(&iaxs[fr->callno]->state, IAX_STATE_STARTED)) { + if (!iaxs[fr->callno] + || !ast_test_flag(&iaxs[fr->callno]->state, IAX_STATE_STARTED)) { ast_variables_destroy(ies.vars); ast_mutex_unlock(&iaxsl[fr->callno]); return 1; @@ -11885,7 +11887,8 @@ immediatedial: } if (f.subclass.integer == AST_CONTROL_CONNECTED_LINE || f.subclass.integer == AST_CONTROL_REDIRECTING) { - if (!ast_test_flag64(iaxs[fr->callno], IAX_RECVCONNECTEDLINE)) { + if (iaxs[fr->callno] + && !ast_test_flag64(iaxs[fr->callno], IAX_RECVCONNECTEDLINE)) { /* We are not configured to allow receiving these updates. */ ast_debug(2, "Callno %u: Config blocked receiving control frame %d.\n", fr->callno, f.subclass.integer); @@ -11907,7 +11910,8 @@ immediatedial: } if (f.frametype == AST_FRAME_CONTROL - && f.subclass.integer == AST_CONTROL_CONNECTED_LINE) { + && f.subclass.integer == AST_CONTROL_CONNECTED_LINE + && iaxs[fr->callno]) { struct ast_party_connected_line connected; /* @@ -11963,9 +11967,11 @@ immediatedial: fr->outoforder = -1; } fr->cacheable = ((f.frametype == AST_FRAME_VOICE) || (f.frametype == AST_FRAME_VIDEO)); - duped_fr = iaxfrdup2(fr); - if (duped_fr) { - schedule_delivery(duped_fr, updatehistory, 0, &fr->ts); + if (iaxs[fr->callno]) { + duped_fr = iaxfrdup2(fr); + if (duped_fr) { + schedule_delivery(duped_fr, updatehistory, 0, &fr->ts); + } } if (iaxs[fr->callno] && iaxs[fr->callno]->last < fr->ts) { iaxs[fr->callno]->last = fr->ts;